如何将列表设为字典的默认值? [重复]

问题描述 投票:0回答:1

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

python dictionary default-value
1个回答
112
投票

一种方法是使用

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()
,您可以将 dct[key] 的值替换为
.append()
的输出,即
None
    

© www.soinside.com 2019 - 2024. All rights reserved.