如何向字典键中添加多个值?

104
我想在Python字典中的特定键上添加多个值。我该怎么做?
a = {}
a["abc"] = 1
a["abc"] = 2

这将会把 a["abc"] 的值从 1 替换为 2

而我想要的是让 a["abc"] 拥有多个值(即既有 1 也有 2)。

3个回答

184
  • 将值变为列表,例如:
a["abc"] = [1, 2, "bob"]

更新:

有几种方法可以向键添加值,并在不存在列表时创建一个列表。我将逐步展示一种这样的方法。

key = "somekey"
a.setdefault(key, [])
a[key].append(1)

结果:

>>> a
{'somekey': [1]}

接下来,尝试:

key = "somekey"
a.setdefault(key, [])
a[key].append(2)

结果:

>>> a
{'somekey': [1, 2]}

setdefault的魔力在于,它会在该键没有定义时初始化该键的值。现在,注意到setdefault返回该值,您可以将它们组合成单行:

a.setdefault("somekey", []).append("bob")

结果:

>>> a
{'somekey': [1, 2, 'bob']}
你应该查看dict方法,特别是get()方法,并进行一些实验以熟悉它。

27

怎么样?

a["abc"] = [1, 2]

这将导致:

>>> a
{'abc': [1, 2]}

这就是你在寻找的吗?


2
  • 追加列表元素

如果需要将字典值扩展到另一个列表中,则可以使用listextend()方法。

a = {}
a.setdefault('abc', []).append(1)       # {'abc': [1]}
a.setdefault('abc', []).extend([2, 3])  # a is now {'abc': [1, 2, 3]}

这在循环中特别有用,因为根据数据类型需要添加或扩展值。

a = {}
some_key = 'abc'
for v in [1, 2, 3, [2, 4]]:
    if isinstance(v, list):
        a.setdefault(some_key, []).extend(v)
    else:
        a.setdefault(some_key, []).append(v)
a
# {'abc': [1, 2, 3, 2, 4]}
  • 追加列表元素并避免重复

如果有一个字典,例如a = {'abc': [1, 2, 3]},需要在不重复的情况下扩展为[2, 4],可以通过检查重复项(使用in运算符)来实现。 get()方法的神奇之处在于,可以设置默认值(在此为空集合([])),以防键不存在于a中,这样成员测试就不会出错。

a = {some_key: [1, 2, 3]}

for v in [2, 4]:
    if v not in a.get(some_key, []):
        a.setdefault(some_key, []).append(v)
a
# {'abc': [1, 2, 3, 4]}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接