我正在尝试建立一种方法,其中如果某项不在词典中,则它将使用列表的最后一个成员并相应地更新词典。有点像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/

10-12 23:06