[英]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.