我正在尝试构建一种方法,如果某个项目不在字典中,那么它会使用列表的最后一个成员并相应地更新字典。类似于pop和setdefault方法的组合。我尝试的是以下内容:
dict1 = {1:2,3:4,5:6}
b = 7
c = [8,9,10]
e = dict1.setdefault(b, {}).update(pop(c))
所以我希望输出是{7:10}
更新为dict1的地方,也就是说,如果b不在dict1的键中,则代码使用b和最后一项更新dict1 c。
答案 0 :(得分:3)
您可能会滥用defaultdict
:
from collections import defaultdict
c = [8, 9, 10]
dict1 = defaultdict(c.pop, {1: 2, 3: 4, 5: 6})
b = 7
e = dict1[b]
这将从c
中弹出一个项目,只要访问dict1
中的密钥,就会将其设为值dict1
。 (这意味着表达式dict1[b]
本身就有副作用。)在很多情况下,这种行为比有用更令人困惑,但在这种情况下,你可以选择显性:
if b in dict1:
e = dict1[b]
else:
e = dict1[b] = c.pop()
当然可以包含在一个函数中:
def get_or_pop(mapping, key, source):
if key in mapping:
v = mapping[key]
else:
v = mapping[key] = source.pop()
return v
⋮
e = get_or_pop(dict1, b, c)