[英]remove element in nested dict by list of keys
我有一个像这样的嵌套字典结构:
dataDict = {
"a":{
"r": 1,
"s": 2,
"t": 3
},
"b":{
"u": 1,
"v": {
"x": 1,
"y": 2,
"z": 3
},
"w": 3
}
}
带有键列表:
maplist = ["b", "v", "y"]
我想删除地图列表指向的字典中的项目。 有什么建议么?
getFromDict
函数由@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]]
只需在访问后使用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
}
}
for k in maplist:
if k in dataDict:
del dataDict[k]
输出:
{'a': {'s': 2, 'r': 1, 't': 3}}
您可以使用递归:
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}}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.