Several times I've been faced with the problem:
Get a value from a dictionary. If the key is not present, then get from another key.
Normally, the implementation would go like this:
if dict.has_key(key1):
return dict[key1]
elif dict.has_key(key2):
return dict[key2]
...
else:
return default_value
Or, even worse, with try-catch statements. That's fine if the sequence is fixed, but what if you want to have some flexibility? Well, my solution is like this:
def cascade_get_value(entry, array, final = None):
"""
Try to get a value from a dict by iterating through a list of keys.
@param entry: a dictionary
@param array: the list of keys
@param final: the default value
It returns the value of the first matching key, or the value specified
in the "final" argument if no matches have been found.
"""
result = None
for val in array:
result = entry.get(val, None)
if result:
break
if not result:
result = final
return result
Pretty, isn't it?
Note: This is a post transferred from Laurii for historical and consolidation purposes.
Member discussion: