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 是一個在每次迭代時訪問內部級別的丟棄引用。

原作者:
...