繁体   English   中英

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

[英]Add values to dict of list in Python?

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

d = dict()

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

if key not in d:
    d[key] = list()
d[key].append(value)

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

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

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

你想要的是一个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])]

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]}
d[key] = list() if (key not in d) else d[key].append(value) 

使用三元运算符。 并且看起来有点干净,但它仍然几乎与您的场景完全相同。

我道歉,我之前没想过并且使用过标准的三元运算符。 我将它们改为Python三元运算符。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM