我正在尝试建立一种方法,其中如果某项不在词典中,则它将使用列表的最后一个成员并相应地更新词典。有点像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和c的最后一项来更新dict1。 最佳答案
您可能会滥用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)
关于python - 在python中结合pop()和setdefault(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48107144/