繁体   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