将列表中的值分配给字典列表中的特定值
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)]
我有值列表:
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)]