![](/img/trans.png)
[英]merging dictionaries (of same key) which is containing a list in python 3.7
[英]Python - create new list containing multiple dictionaries with the same key name and different value
我正在尝试创建一个包含 n 个字典的新列表,每个字典都有相同的键但值不同,这有一个非常具体的用例,所以我最初的想法是:
template = [
{'holder': None,},
]
event = []
for entry in range(0,4):
event.extend(template)
event[entry]['holder'] = "Mock-Value-" + str(entry)
print(event[entry]['holder'])
print()
for item in event:
print(item['holder'])
基于上面的代码,我期待:
Mock-Value-0
Mock-Value-1
Mock-Value-2
Mock-Value-3
Mock-Value-0
Mock-Value-1
Mock-Value-2
Mock-Value-3
但我得到以下信息:
Mock-Value-0
Mock-Value-1
Mock-Value-2
Mock-Value-3
Mock-Value-3
Mock-Value-3
Mock-Value-3
Mock-Value-3
很明显我在这里遗漏了一些东西
问候,伊佐
之所以看起来每个元素的字典都与最后更新的值相关联,是因为它们都是同一个实例。 这是因为:
template = [
{'holder': None,},
]
包含运行这些代码行时创建的相同字典实例。 以及您对数组的扩展:
event.extend(template)
将引用同一实例的指针推入列表。 本质上,您最终会得到一个列表,其中每个元素都指向同一个实例。 因此,更新其中一个(在您的情况下是最后一个)会更新所有指针指向的实例,导致它看起来像是更改了所有其他值,而实际上它们是相同的 object。
一个简单的修复方法是每次都通过将其设为 function get_template
来创建字典的新实例:
get_template = lambda: [
{'holder': None,},
]
event = []
for entry in range(0,4):
event.extend(get_template())
event[entry]['holder'] = "Mock-Value-" + str(entry)
print(event[entry]['holder'])
print()
for item in event:
print(item['holder'])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.