Dictionaries and default values Dictionaries and default values python python

Dictionaries and default values


Like this:

host = connectionDetails.get('host', someDefaultValue)


You can also use the defaultdict like so:

from collections import defaultdicta = defaultdict(lambda: "default", key="some_value")a["blabla"] => "default"a["key"] => "some_value"

You can pass any ordinary function instead of lambda:

from collections import defaultdictdef a():  return 4b = defaultdict(a, key="some_value")b['absent'] => 4b['key'] => "some_value"


While .get() is a nice idiom, it's slower than if/else (and slower than try/except if presence of the key in the dictionary can be expected most of the time):

>>> timeit.timeit(setup="d={1:2, 3:4, 5:6, 7:8, 9:0}", ... stmt="try:\n a=d[1]\nexcept KeyError:\n a=10")0.07691968797894333>>> timeit.timeit(setup="d={1:2, 3:4, 5:6, 7:8, 9:0}", ... stmt="try:\n a=d[2]\nexcept KeyError:\n a=10")0.4583777282275605>>> timeit.timeit(setup="d={1:2, 3:4, 5:6, 7:8, 9:0}", ... stmt="a=d.get(1, 10)")0.17784020746671558>>> timeit.timeit(setup="d={1:2, 3:4, 5:6, 7:8, 9:0}", ... stmt="a=d.get(2, 10)")0.17952161730158878>>> timeit.timeit(setup="d={1:2, 3:4, 5:6, 7:8, 9:0}", ... stmt="if 1 in d:\n a=d[1]\nelse:\n a=10")0.10071221458065338>>> timeit.timeit(setup="d={1:2, 3:4, 5:6, 7:8, 9:0}", ... stmt="if 2 in d:\n a=d[2]\nelse:\n a=10")0.06966537335119938