我的 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'”。有什么建议吗?
最佳答案
最好的方法是使用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
。
关于python - 如何将列表作为字典的默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17755996/