繁体   English   中英

通过键列表删除嵌套字典中的元素

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM