我有两个json文件,每个文件都以字典的形式。我想比较它们,但这样做时会忽略“ ver”键。我已经看过以下问题,并将答案作为我的功能实现了:Compare dictionaries ignoring specific keys

但是,当比较两个仅在'ver'键上有所不同的文件时,该函数仍返回false。

def compare_json(file_1, file_2, ignore_key):
    ignored = set(ignore_key)
    for k1, v1 in file_1.iteritems():
        if k1 not in ignored and (k1 not in file_2 or file_2[k1] != v1):
            return False

    for k2, v2 in file_2.iteritems():
        if k2 not in ignored and k2 not in file_1:
            return False

    return True



if not compare_json(data, latest_file, ('ver')):
        print 'not equal'
        data['ver'] += 1
        ver_number = data['ver']
        with open(('json/{0}.v{1}.json').format(name, ver_number)) as new_json:
            json.dump(data, new_json)
    else:
        print 'equal'


这是打印json字典的样子:

{'ver': 1, 'data': 0}

{'ver': 2, 'data': 0}


比较上面应该返回true;但是,它返回false。当我将版本号更改为相同的编号时,它将返回true。

最佳答案

('ver')更改为('ver',)

('ver')不是元组,只是括号中的'ver'set(('ver'))分别是{'e','r','v'},这是您的函数忽略的键-但它们不是您要忽略的键。

相反,('ver',)是一个单元素元组,而set(('ver',)){'ver'}

关于python - 如何比较不考虑特定 key 的两个json文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51485879/

10-09 21:11