簡體   English   中英

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

[英]Combine pop() and setdefault() in python

我正在嘗試構建一種方法,如果某個項目不在字典中,則它使用列表的最后一個成員並相應地更新字典。 有點像 pop 和 setdefault 方法的組合。 我嘗試的是以下內容:

dict1 = {1:2,3:4,5:6}
b = 7
c = [8,9,10]
e = dict1.setdefault(b, {}).update(pop(c))

所以我希望 output 是{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的值。 (這意味着表達式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)

考慮到您的變量,您可以使用以下代碼片段

dict1[b] = dict1.pop(b, c.pop())

您正在使用鍵“b”和值 c.pop() 更新字典“dict1”的位置(c 中列表的最后一個值,在本例中相當於 c[-1])。 請注意,這是可能的,因為鍵值 b=7 不在您的原始字典中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM