我有一个词典,让我们说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中执行此操作?
答案 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,即使它们指向不同的值。