将列表中的值分配给字典列表中的特定值

Assign values from list to specific values in a list of dictionaries

我有值列表:

list = [value1, value2, value3]

以及我必须在特定键上设置相应值的字典列表:

dictionaries = [{"key1":{"key2":{"key3":position_value1}}},{"key1":{"key2":{"key3":position_value2}}}]

我正在尝试分配值,避免需要对列表和字典的数字索引进行显式迭代的解决方案。

I find the next pseudo-solution iterating over two iterables at the same time using for-each loops

for (dict, value) in zip(dictionaries, list):
    dict['key1']['key2']['key3'] = value
print(dictionaries)

但是不起作用,因为所有字典只取值列表的最后一个值,获得下一个结果:

[{"key1":{"key2":{"key3":position_value3}}},{"key1":{"key2":{"key3":position_value3}}}]

重要的是要注意,在创建字典列表时使用了 dict.copy() 方法,但这可能不会影响嵌套字典中分配的引用。

Dictionary list creation

base_dict = {"key1": {"key2":{"key3": None}}}
dictionaries = [base_dict.copy() for n in range(3)]

我很欣赏任何紧凑的解决方案,甚至是基于解包的解决方案。

base_dict = {"key1": {"key2":{"key3": None}}}
dictionaries = [base_dict.copy() for n in range(3)]

将创建 base_dict 副本。这意味着虽然它们在顶层是独立的,但它们的值是通过引用复制的;因此,内部字典 {"key2":{"key3": None}} 仍然是同一个对象。重新绑定时 key3,所有引用都会受到影响。

您可以通过 deepcopy:

来避免这种情况
from copy import deepcopy

dictionaries = [deepcopy(base_dict) for _ in range(3)]