[英]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']}
這說明清楚了嗎?
請注意, first
和second
指的是同一個列表。
>>> 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.