📅 2017-Jul-03 ⬩ ✍️ Ashwin Nanjappa ⬩ 🏷️ dict, get, python ⬩ 📚 Archive
The Python dictionary provides an associate array interface to get the value associated with a key:
>>> d = { 1:"cat", 2:"rat" }
>>> d[1]
'cat'
However, this interface is not very friendly if you lookup a key that does not exist. In such a case, it throws a KeyError
exception:
>>> d[3]
KeyError: 3
Python dictionary provides a get method that is safer, it returns a None
value if the key is not present:
>>> print(d.get(3))
None
This method is actually cooler than it looks cause you can make it return any default value you want when the key is not present in the dictionary. You do this by passing the default value as the second argument:
>>> print(d.get(1, "elephant"))
cat
>>> print(d.get(3, "elephant"))
elephant
In many cases, we might have the key in the dictionary, but its value is set to some default value like None
or empty string or empty list or empty dict or such values. But at the point we are picking values from keys assume we want such default-valued keys to return a different default value. The trick is that since such default values default to False
in Python, we can use that to our advantage.
For example, say the dictionary is already created and not under our control. But, whenever I read values from it, I want elephant
if the key does not exist or if the value is a default value that evaluates to False
. It gives rise to an elegant Python idiom using get
method and or
operator:
>>> d = { 1:"cat", 2:"rat", 3:None, 4:"" }
>>> v = d.get(1) or "elephant" ; print(v)
cat
>>> v = d.get(3) or "elephant" ; print(v)
elephant
>>> v = d.get(4) or "elephant" ; print(v)
elephant
>>> v = d.get(99) or "elephant" ; print(v)
elephant