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

时间:2018-04-26 13:36:35

标签: python dictionary

我有一个嵌套的字典结构:

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中的项目。有什么建议吗?

4 个答案:

答案 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}}