在Python中为列表的dict添加值?

hyd*_*yde 3 python dictionary

我有这种列表字典,最初是空的:

d = dict()
Run Code Online (Sandbox Code Playgroud)

现在的用例是简单地在键下添加一个值,该键可能是新键或现有键.我想我们必须这样做:

if key not in d:
    d[key] = list()
d[key].append(value)
Run Code Online (Sandbox Code Playgroud)

这看起来非常繁琐且容易出错,需要编写多行(使用复制粘贴或辅助函数).有更方便的方式吗?

如果没有"只有一种方法可以做到这一点",并且你知道它,你也可以回答这个问题,也许可以建议其他方法来完成上述工作,即使它们不一定更好.

我找了重复,没找到,但也许我只是不知道使用正确的关键字.

Sup*_*ior 9

d[key] = d.get(key, []) + [value]

解释
d.get方法返回键下的值key,如果没有这样的键,则返回可选参数(第二个),在这种情况下[](空列表)

然后您将获得列表(是否为空),然后[value]向其中添加列表。这也可以通过.append(value)代替+ [value]

拥有该列表,您将其设置为该键的新值

例如

d = {1: [1, 2]}
d[1] = d.get(1, []) + [3]
# d == {1: [1, 2, 3]}

d[17] = d.get(17, []) + [8]
# d == {1: [1, 2, 3], 17: [8]}
Run Code Online (Sandbox Code Playgroud)

  • 为什么不只是`d.setdefault(key, []).append(value)`? (3认同)

208*_*080 6

你想要的是一个defaultdict,在集合库中可用:

Python2.7:https://docs.python.org/2/library/collections.html#defaultdict-examples

Python3.7:https://docs.python.org/3/library/collections.html#collections.defaultdict

Example:
>>> from collections import defaultdict
>>> s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
>>> d = defaultdict(list)
>>> for k, v in s:
...     d[k].append(v)
...
>>> sorted(d.items())
[('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])]
Run Code Online (Sandbox Code Playgroud)