用于检查我的dict是否包含原型密钥层次结构的pythonic方法

时间:2017-07-19 13:54:19

标签: python

我有一个词典,让我们说mydict

我也知道这个json,让我们说myjson

{
    "actor":{  
        "name":"",
        "type":"",
        "mbox":""
    },
    "result":{  
        "completion":"",
        "score":{ "scaled":"" },
        "success":"",
        "timestamp":""
    },
    "verb":{  
        "display":{  
            "en-US":""
        },
        "id":""
    },
    "context":{  
        "location":"",
        "learner_id": "",
        "session_id": ""
    },
    "object":{  
        "definition":{  
            "name":{  
                "en-US":""
            }
        },
        "id":"",
        "activity_type":""
    }
}

我想知道所有myjson个密钥(具有相同的层次结构)是否都在mydict中。我不在乎mydict是否有更多数据(可以拥有更多数据)。我如何在python中执行此操作?

2 个答案:

答案 0 :(得分:1)

制作myjson

字典
import json

with open('myjson.json') as j:
    new_dict = json.loads(j.read())

然后浏览该词典的每个键,并确认该词的值在两个词典中都相同

def compare_dicts(new_dict, mydict):
    for key in new_dict:
        if key in mydict and mydict[key] == new_dict[key]:
            continue
        else:
            return False
    return True

编辑: 稍微复杂一点,但这样的事情应该适合你的需要

def compare(n, m):
    for key in n:
        if key in m:
            if m[key] == n[key]:
                continue
            elif isinstance(n[key], dict) and isinstance(m[key],dict):
                if compare(n[key], m[key]):
                    continue
                else:
                    return False
        else:
            return False
    return True

答案 1 :(得分:0)

如果你只关心价值而不是关键,你可以这样做:

>>> all(v in mydict.items() for v in myjson.items())
True

如果myjson的所有值都在mydict中,即使它们有其他键也是如此。

编辑:如果您只关心密钥,请使用:

>>> all(v in mydict.keys() for v in myjson.keys())
True

如果myjson的每个键都在mydict中,则返回true,即使它们指向不同的值。