简体   繁体   English

python 在 setdefault 行为中设置默认值

[英]python setdefault in setdefault behavior

I tries to understand how nested setdefault works in code.我试图了解嵌套的 setdefault 在代码中是如何工作的。 I know how the basic setdefault works but I have a problem with figuring out such an code:我知道基本的 setdefault 是如何工作的,但我在弄清楚这样的代码时遇到了问题:

there are no keys in d, why both keys and values are added? d 中没有键,为什么要同时添加键和值? "333" not in d so we're going to defult value d.setdefault("444",[]) -> we put a "444" key with a value [], setdefault return [] which we insert to "333" key which is returned by first setdefault and append is made(why for both new keys, I thought only for "333") "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 is already in d, "ddd" is appended to the existing "111" key but why is there a new key "444"? 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': []}

first and the second key is already in d, only first updated?第一个和第二个键已经在 d 中,只有第一个更新?

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

second is in d,..?第二个在 d,..?

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

thanks for the explanation感谢您的解释

It works like this:它是这样工作的:

>>> 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']}

Does that make it clear?这说明清楚了吗?

Note that first and second refer to the same list.请注意, 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