【问题标题】:Assign values from list to specific values in a list of dictionaries将列表中的值分配给字典列表中的特定值
【发布时间】:2021-12-10 06:29:01
【问题描述】:

我有值列表:

list = [value1, value2, value3]

还有一个字典列表,我必须在特定键上设置相应的值:

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

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

我发现下一个伪解决方案使用 for-each 循环同时迭代两个可迭代对象

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() 方法,但这可能不会影响嵌套字典中分配的引用。

字典列表创建

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

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

【问题讨论】:

  • 显示您如何创建字典列表的代码。

标签: python-3.x list dictionary reference variable-assignment


【解决方案1】:
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)]

【讨论】:

  • 只要base_dict 简单且只使用一次,一个好的替代方案就是[{"key1": {"key2":{"key3": None}}} for _ in range(3)]
猜你喜欢
  • 2021-04-02
  • 2018-08-20
  • 1970-01-01
  • 2021-12-27
  • 1970-01-01
  • 2021-06-16
  • 1970-01-01
  • 2018-08-30
  • 1970-01-01
相关资源
最近更新 更多