【发布时间】:2019-05-13 17:27:42
【问题描述】:
我有两个由字典组成的不同文件。我正在尝试仅遍历字典第一个文件中的键 ('name') 和值,并将它们与第二个文件匹配。我似乎得到了错误的输出,因为它循环通过两个键“名称”和“大小”。我已经研究了一些这样做的方法,但我不想能够将我的字典转换为集合。我希望能够打印出“匹配”或“不匹配”。到目前为止,我已经完成了以下工作:
def compare_files():
with open('new.json', 'r') as current_data_file, open('old.json','r') as pre_data_file:
for current_data, previous_data in zip(current_data_file, pre_data_file):
data_current = json.loads(current_data)
data_previous = json.loads(previous_data)
for key, value in data_current.items():
if value not in data_previous:
print "No Match"
else:
print "Match"
这是我正在加载的两个 json 文件:
old.json
{"name": "d.json", "size": 1000}
{"name": "c.json", "size": 1000}
{"name": "b.json", "size": 1000}
新的.json
{"name": "a.json", "size": 1000}
{"name": "b.json", "size": 1000}
{"name": "c.json", "size": 1000}
data_current 是:
{u'size': 1000, u'name': u'a.json'}
{u'size': 1000, u'name': u'b.json'}
{u'size': 1000, u'name': u'c.json'}
data_previous 是:
{u'size': 1000, u'name': u'd.json'}
{u'size': 1000, u'name': u'c.json'}
{u'size': 1000, u'name': u'b.json'}
输出:
No Match
No Match
No Match
No Match
No Match
No Match
我的预期输出是:
No Match
Match
Match
b.json 和 c.json 都存在,但 a.json 和 d.json 不存在。
【问题讨论】:
-
你试过
if value not in data_previous.values():吗?这样您只需签入值而不是键和值 -
我想只检查键 'name' 而不是 'size' 的值? @Bazingaa
-
如果你只想检查密钥
'name',你没有检查密钥。此外,if value not in data_previous不会检查data_previous的值,而是将data_current中的值与data_previous中的键进行比较 -
@sparkdev 我不确定您的预期输出是什么?我假设它不在问题中。
-
我已经更新了我的问题@RoadRunner
标签: python json python-2.7 dictionary