在python中组合pop()和setdefault()

时间:2018-01-05 04:20:38

标签: python

我正在尝试构建一种方法,如果某个项目不在字典中,那么它会使用列表的最后一个成员并相应地更新字典。类似于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。

1 个答案:

答案 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)