Python:list()作为字典的默认值

时间:2013-07-19 21:43:53

标签: python dictionary default-value

我有Python代码,如下所示:

if key in dict:
  dict[key].append(some_value)
else:
  dict[key] = [some_value]

但我认为应该有一些方法可以解决这个'if'语句。我试过了

dict.setdefault(key, [])
dict[key].append(some_value)

dict[key] = dict.get(key, []).append(some_value)

但两人都抱怨“TypeError:unhashable type:'list'”。有什么建议?谢谢!

1 个答案:

答案 0 :(得分:50)

最好的方法是使用collections.defaultdict list默认值:

from collections import defaultdict
dct = defaultdict(list)

然后使用:

dct[key].append(some_value)

如果密钥尚未出现在映射中,字典将为您创建一个新列表。 collections.defaultdictdict的子类,其他行为与普通dict对象相同。

使用标准dict时,dict.setdefault()会将dct[key]正确设置为默认值,因此该版本应该可以正常使用。您可以使用.append()链接该通话:

>>> dct = {}
>>> dct.setdefault('foo', []).append('bar')  # returns None!
>>> dct
{'foo': ['bar']}

但是,通过dct[key] = dct.get(...).append()使用dct[key] 替换 .append()的值None,即{{1}}。