40

我有一个 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'”。有什么建议吗?

4

1 回答 1

95

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

from collections import defaultdict
dct = defaultdict(list)

然后只需使用:

dct[key].append(some_value)

如果键不在映射中,字典将为您创建一个新列表。collections.defaultdict是一个子类,dict否则其行为就像一个普通dict对象。

使用标准dict时,为您dict.setdefault()正确设置dct[key]为默认值,因此该版本应该可以正常工作。您可以使用以下方式链接该调用.append()

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

但是,通过使用,dct[key] = dct.get(...).append()您可以将for 的值替换dct[key]为的输出.append(),即None

于 2013-07-19T21:44:38.713 回答