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

时间: 原作者:

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 是一个在每次迭代时访问内部级别的丢弃引用。

原作者:
...