Python使用键列表更改字典的值

原文标题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)

原文链接:https://stackoverflow.com//questions/71910182/python-change-a-value-of-a-dictinary-wth-a-list-of-key

回复

我来回复
  • kosciej16的头像
    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年前 0条评论