The best method is to use collections.defaultdict
with a list
default:
from collections import defaultdict
dct = defaultdict(list)
Then just use:
dct[key].append(some_value)
and the dictionary will create a new list for you if the key is not yet in the mapping. collections.defaultdict
is a subclass of dict
and otherwise behaves just like a normal dict
object.
When using a standard dict
, dict.setdefault()
correctly sets dct[key]
for you to the default, so that version should have worked just fine. You can chain that call with .append()
:
>>> dct = {}
>>> dct.setdefault('foo', []).append('bar') # returns None!
>>> dct
{'foo': ['bar']}
However, by using dct[key] = dct.get(...).append()
you replace the value for dct[key]
with the output of .append()
, which is None
.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…