我试图了解嵌套setdefault在代码中是如何工作的。我知道基本的setdefault是如何工作的,但是我在找出这样的代码时遇到了问题:
d中没有键,为什么要同时添加键和值?"333“不在d中,所以我们要删除值d.setdefault( "444”,[]) --我们将一个“444”键加上一个值[],并将其插入到"333“键中,该键由第一个setdefault返回并追加(为什么对于这两个新键,我只考虑了"333")
d = {'111': ['aaa', 'bbb'], '222': ['ccc']}
d.setdefault("333", d.setdefault("444",[])).append("ddd")
{'111': ['aaa', 'bbb'], '222': ['ccc'], '444': ['ddd'], '333': ['ddd']}首先在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']} 谢谢你的解释
发布于 2022-01-19 12:08:28
它的工作方式如下:
>>> 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']}https://stackoverflow.com/questions/70770250
复制相似问题