python-3.x - python: 如果键位于列表中,如何在dict中保存值?

  显示原文与译文双语对照的内容
133 2

假设我有一个钥匙清单

key_lst = ["key1","key2","key3"]

我有一个价值

value ="my_value"

这个结构有一个例子 dict my_dict

{
"key1": {
"key2": {
"key3":"some_value"
 }
 },
}

如何通过在 key_lst 上遍历/循环来动态地将变量 value 中的新值赋给 my_dict["key1"]["key2"]["key3"]

我不能这么说my_dict["key1"]["key2"]["key3"] = value因为钥匙和钥匙的数量都在变化。我总是把( 我必须保存值的路径)的钥匙放在名单里。

我正在使用 python 3.7

时间:原作者:0个回答

74 2

可以使用 functools.reduce 定义函数,以便重复应用 getitem,然后设置提供的值:

from functools import reduce
from operator import getitem
def set_nested_item(dataDict, mapList, val):
"""Set item in nested dictionary"""
 reduce(getitem, mapList[:-1], dataDict)[mapList[-1]] = val
 return dataDict
key_lst = ["key1","key2","key3"]
value ="my_value"
d = {"key1": {"key2": {"key3":"some_value"}}}
d = set_nested_item(d, key_lst, value)
print(d)
# {'key1': {'key2': {'key3': 'my_value'}}}
原作者:
123 2

你可以在循环中使用 setdefault 迭代地生成/访问级别:

d = {}
d2 = d
for k in key_lst[:-1]:
 d2 = d2.setdefault(k, {})
d2[key_lst[-1]] = value
print(d)
# {'key1': {'key2': {'key3': 'my_value'}}}

d 是对字典的引用,d2 是一个在每次迭代时访问内部级别的丢弃引用。

原作者:
...