yourDict['b']['d']['b'] = "test"
编辑——OP提到这是不可接受的,因为索引必须来自运行时定义的任意长度的列表。
解决方案:
reduce(lambda d,i:d[i], indexList[:-1], yourDict)[indexList[-1]] = "test"
演示:
>>> yourDict = {'a':1, 'b':{'c':1, 'd': {'b':1}}}
>>> indexList = ['b','d','b']
>>> reduce(lambda d,i:d[i], indexList[:-1], yourDict)[indexList[-1]] = "test"
>>> yourDict
{'a': 1, 'b': {'c': 1, 'd': {'b': 'test'}}}
演示 2:
>>> yourDict = {'a':1, 'b':{'c':1, 'd': {'b':1}}}
>>> indexList=['a']
>>> reduce(lambda d,i:d[i], indexList[:-1], yourDict)[indexList[-1]] = "test"
>>> yourDict
{'a': 'test', 'b': {'c': 1, 'd': {'b': 1}}}