python - 循环在两个字典中查找匹配值

标签 python json python-2.7 dictionary

我有两个不同的文件,其中包含字典。我试图仅循环遍历字典第一个文件中的键(“名称”)和值,并将它们与第二个文件进行匹配。当它循环遍历键“名称”和“大小”时,我似乎得到了错误的输出。我已经研究了几种执行此操作的方法,但我不希望能够将我的字典转换为集合。我希望能够打印出“匹配”或“不匹配”。到目前为止我已经做了以下工作:

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 文件:

旧的.json

{"name": "d.json", "size": 1000}
{"name": "c.json", "size": 1000}
{"name": "b.json", "size": 1000}

new.json

{"name": "a.json", "size": 1000}
{"name": "b.json", "size": 1000}
{"name": "c.json", "size": 1000}

当前数据是:

{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 不存在。

最佳答案

为了省去麻烦,你可以直接使用pandas(第三方库)读取数据,并且可以非常轻松地进行分析

import pandas as pd

df=pd.DataFrame('new.json')
df2=pd.DataFrame('old.json')

df.name.isin(df2.name).replace({False:'No Match',True:'Match'}).tolist()

输出

['No Match', 'Match', 'Match']

关于python - 循环在两个字典中查找匹配值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53745893/

相关文章:

Python __repr__ 用于所有成员变量

python - 使用 LineProfiler 对 Django 应用程序进行逐行分析

Python - SimpleJSON 问题

php - 使用 php 将 JSON 数据插入 mysql

python - 我正在尝试用 python 压缩文件,但似乎很挣扎

python - 如何增强python中内置函数的特性?

python - mypy,输入提示 : Union[float, int] -> 有数字类型吗?

python - 使用 python tkinter 布置框架时出现问题(框架内的框架使父框架不可见)

javascript - 在嵌套的 json 数据 Angular js 的情况下,如何为 ng-options 设置默认值?

python - 如何在 Cython 的新型缓冲区对象中包装 C 指针和长度?