我有一个嵌套的字典结构:
dataDict = {
"a":{
"r": 1,
"s": 2,
"t": 3
},
"b":{
"u": 1,
"v": {
"x": 1,
"y": 2,
"z": 3
},
"w": 3
}
}
带有一系列密钥:
maplist = ["b", "v", "y"]
我想删除maplist指向的dict中的项目。有什么建议吗?
答案 0 :(得分:2)
这是一种方式。将来,请参阅您发现此数据的the question。
getFromDict
函数courtesy of @MartijnPieters。
from functools import reduce
import operator
def getFromDict(dataDict, mapList):
return reduce(operator.getitem, mapList[:-1], dataDict)
maplist = ["b", "v", "y"]
del getFromDict(dataDict, maplist)[maplist[-1]]
答案 1 :(得分:0)
访问后只需使用del
:
del dataDict[maplist[0]][maplist[1]][maplist[2]]
给出:
dataDict = {
"a":{
"r": 1,
"s": 2,
"t": 3
},
"b":{
"u": 1,
"v": {
"x": 1,
"z": 3
},
"w": 3
}
}
答案 2 :(得分:0)
for k in maplist:
if k in dataDict:
del dataDict[k]
输出:
{'a': {'s': 2, 'r': 1, 't': 3}}
答案 3 :(得分:0)
您可以使用递归:
maplist = ["b", "v", "y"]
dataDict = {'a': {'s': 2, 'r': 1, 't': 3}, 'b': {'u': 1, 'w': 3, 'v': {'y': 2, 'x': 1, 'z': 3}}}
def remove_keys(d):
return {a:remove_keys(b) if isinstance(b, dict) else b for a, b in d.items() if a not in maplist}
final_result = remove_keys(dataDict)
输出:
{'a': {'s': 2, 'r': 1, 't': 3}}