我想在Python字典中的特定键上添加多个值。我该怎么做?
a = {}
a["abc"] = 1
a["abc"] = 2
这将会把 a["abc"]
的值从 1
替换为 2
。
而我想要的是让 a["abc"]
拥有多个值(即既有 1
也有 2
)。
a = {}
a["abc"] = 1
a["abc"] = 2
这将会把 a["abc"]
的值从 1
替换为 2
。
而我想要的是让 a["abc"]
拥有多个值(即既有 1
也有 2
)。
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()
方法,并进行一些实验以熟悉它。怎么样?
a["abc"] = [1, 2]
这将导致:
>>> a
{'abc': [1, 2]}
这就是你在寻找的吗?
如果需要将字典值扩展到另一个列表中,则可以使用list
的extend()
方法。
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]}