Python使用键列表更改字典的值
python 322
原文标题 :Python change a value of a dictinary wth a list of key
我有一本字典,像这样:
myDict = {"a":{"a":{"a":8, "b":4, "c":5}, "b":{"a":0, "b":2, "c":1}, "c":{"a":3, "b":9, "c":6}}}
我有一个列表(有多个元素,可能很多):
myKeys = ["a", "c", "b"]
我的问题是,我想创建一个改变字典值的函数:
def ValKeys(mDict, mKeys, mValue):
#some code...
#it do that:
mDict[mKeys[0]][mKeys[1]][mKeys[2]]...[mKeys[len(mKeys)]] = mValue
return mDict
例如在这种情况下,它返回:
myDict = ValKeys(myDict, myKeys, 7) #=> myDict["a"]["c"]["b"] = 7 (instead of 9)
回复
我来回复-
kosciej16 评论
我猜最大的问题是你不知道 mKeys 的长度,但是你可以使用循环来访问嵌套的字典:
tmp_dict = mDict for k in mKeys[:-1]: # notice we stop before last key tmp_dict = tmp_dict[k] # now tmp_dict is the reference for the most nested dict, we can just assign value tmp_dict[mKeys[-1]] = mValue
与更多的pythonic方法相同:
import functools nested = functools.reduce(lambda d, x: d[x], mKeys[:-1], mDict) nested[mKeys[-1]] = mValue
2年前