簡體   English   中英

python 在 setdefault 行為中設置默認值

[英]python setdefault in setdefault behavior

我試圖了解嵌套的 setdefault 在代碼中是如何工作的。 我知道基本的 setdefault 是如何工作的,但我在弄清楚這樣的代碼時遇到了問題:

d 中沒有鍵,為什么要同時添加鍵和值? "333" 不在 d 中,所以我們將默認值 d.setdefault("444",[]) -> 我們放置一個帶有值 [] 的 "444" 鍵,setdefault 返回 [] 我們將其插入到 "333 " 由第一個 setdefault 和 append 返回的鍵(為什么對於兩個新鍵,我認為只適用於“333”)

d = {'111': ['aaa', 'bbb'], '222': ['ccc']}
d.setdefault("333", d.setdefault("444",[])).append("ddd") 
{'111': ['aaa', 'bbb'], '222': ['ccc'], '444': ['ddd'], '333': ['ddd']}

first 已經在 d 中,“ddd”被附加到現有的“111”鍵但是為什么有一個新的鍵“444”?

d = {'111': ['aaa', 'bbb'], '222': ['ccc']}
d.setdefault("111", d.setdefault("444",[])).append("ddd") 
{'111': ['aaa', 'bbb', 'ddd'], '222': ['ccc'], '444': []}

第一個和第二個鍵已經在 d 中,只有第一個更新?

d = {'111': ['aaa', 'bbb'], '222': ['ccc']}
d.setdefault("111", d.setdefault("222",[])).append("ddd") 
{'111': ['aaa', 'bbb', 'ddd'], '222': ['ccc']}

第二個在 d,..?

d = {'111': ['aaa', 'bbb'], '222': ['ccc']}
d.setdefault("333", d.setdefault("222",[])).append("ddd") 
{'111': ['aaa', 'bbb'], '222': ['ccc', 'ddd'], '333': ['ccc', 'ddd']} 

感謝您的解釋

它是這樣工作的:

>>> d = {'111': ['aaa', 'bbb'], '222': ['ccc']}
>>> first = d.setdefault("444",[])
>>> first
[]
>>> d
{'111': ['aaa', 'bbb'], '222': ['ccc'], '444': []}
>>> second = d.setdefault("333", first)
>>> second
[]
>>> d
{'111': ['aaa', 'bbb'], '222': ['ccc'], '444': [], '333': []}
>>> second.append("ddd")
>>> second
['ddd']
>>> d
{'111': ['aaa', 'bbb'], '222': ['ccc'], '444': ['ddd'], '333': ['ddd']}

這說明清楚了嗎?

請注意, firstsecond指的是同一個列表。

>>> first is second
True
>>> first.append('test')
>>> first
['ddd', 'test']
>>> second
['ddd', 'test']
>>> d
{'111': ['aaa', 'bbb'], '222': ['ccc'], '444': ['ddd', 'test'], '333': ['ddd', 'test']}

暫無
暫無

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

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