Python 使用键列表更改字典的值
Python change a value of a dictionary with a list of keys
我有一本字典,像这样:
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
例如在这种情况下,它 returns:
myDict = ValKeys(myDict, myKeys, 7) #=> myDict["a"]["c"]["b"] = 7 (instead of 9)
我猜最大的问题是你不知道mKeys
的长度,但是你可以使用循环来访问嵌套的dict
:
def ValKeys(mDict, mKeys, mValue):
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
mDict = {"a": {"b": 1}}
mKeys = ["a", "b"]
ValKeys(mDict, mKeys, 5)
print(mDict) # {"a": {"b": 5}}
与更多 pythonic 方法相同:
import functools
def ValKeys(mDict, mKeys, mValue):
nested = functools.reduce(lambda d, x: d[x], mKeys[:-1], mDict)
nested[mKeys[-1]] = mValue
我有一本字典,像这样:
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
例如在这种情况下,它 returns:
myDict = ValKeys(myDict, myKeys, 7) #=> myDict["a"]["c"]["b"] = 7 (instead of 9)
我猜最大的问题是你不知道mKeys
的长度,但是你可以使用循环来访问嵌套的dict
:
def ValKeys(mDict, mKeys, mValue):
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
mDict = {"a": {"b": 1}}
mKeys = ["a", "b"]
ValKeys(mDict, mKeys, 5)
print(mDict) # {"a": {"b": 5}}
与更多 pythonic 方法相同:
import functools
def ValKeys(mDict, mKeys, mValue):
nested = functools.reduce(lambda d, x: d[x], mKeys[:-1], mDict)
nested[mKeys[-1]] = mValue