python - 如何将列表作为字典的默认值?

标签 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'”。有什么建议吗?

最佳答案

最好的方法是使用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

关于python - 如何将列表作为字典的默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17755996/

相关文章:

python - 将 CSV 转换为 JSON。如何保持具有相同索引的值?

c++ - 合成图 : take data from another Map

dictionary - terraform `map` 重复键应该引发​​错误时的替代方案

spring - 在 Spring 中将默认属性值指定为 NULL

python - args 或 kwargs 是否接受 python 参数的默认值?

python - 如何修复 'cv2' 没有属性 'CascadeClassifier'?

python - 按行划分金额

用于树结构的类似 Python numpy 的接口(interface)

python - 重命名 Pandas DataFrame 索引

.net - 您可以为 Func 或 Action 类型的函数或子参数指定默认值吗?