除了嵌套dicts的python中的等价物

时间:2015-07-16 16:37:14

标签: python dictionary nested except

我有两个大型嵌套词典,格式为

dictOne = "key1": {
               "key2": {}
               "key3": {
                    "key4" : {data...}
               }
           }

dictTwo = "key1": {
               "key2": {}
           }

除了长达数千行之外,其中一些词组的嵌套级别为10-15级。 我想找到一种方法将它们组合在一起,类似于SQL中的EXCEPT。我希望dictTwo中显示的任何键都可以从dictOne中删除,但前提是键下的dict没有子节点。 所以在这种情况下产生的字典将是

    dictRes = "key1": {
                  "key3": {
                      "key4" : {data...}
                   }
               }

我假设没有简单的方法可以做到这一点,但我希望有人能指出我朝着正确的方向指出一个可以实现这个目标的方法

1 个答案:

答案 0 :(得分:0)

听起来你需要一个递归选项。

def dict_parser(target, pruning):
    d = {}
    for k,v in target.items():
        if (not v) and (k in pruning):
            continue
        if isinstance(v, dict):
            d[k] = dict_parser(v, pruning.get(k, {}))
        else:
            d[k] = v
    return d

样本:

dictOne = {"key1": {
               "key2": {},
               "key3": {
                    "key4" : {"some stuff"}
               }
           }}

dictTwo = {"key1": {
               "key2": {}
           }}

dict_parser(dictOne, dictTwo)
# gives:
# # {'key1': {
# #     'key3': {
# #         'key4': {'some stuff'}}}}