Dict值未按排序顺序显示python

时间:2018-12-08 18:02:46

标签: python json python-2.7 loops return-value

我有一个for循环,在其中循环访问值并比较两个json文件中的值。当我打印出值时,我正在检查键“文件名”在两个文件之间是否匹配。数据顺序已交换,但值相同。他们没有改变。

CAD_REPEQUEST.pdf JP_CADS.pdf JP_Reports.pdf

我尝试使用CAD_REPEQUEST.pdf JP_CADS.pdf JP_Reports.pdf 以升序打印它,但它似乎仍然不起作用。我的JSON文件如下:

dave.json has a match 

emhy.json has no match 

same.json has no match 

值的顺序仍然相同。到目前为止,我的代码如下:

sorted()

1 个答案:

答案 0 :(得分:0)

第一个问题-您的day.json和night.json不是json文件,即使名称表明它们是。

由于第一个问题,您无法直接加载它们。您可以通过键分别加载和排序每一行,并与另一个文件中的相应行进行比较。 “文件名”始终位于“文件大小”之前。如果night.json和day.json文件中的顺序不同,则会产生错误的结果。

第三个问题是您同时在文件中查找文件,并在新文件中查找文件,而不是在旧数据中查找文件。如果旧文件存在但新文件丢失怎么办?

如果文件采用这种格式,这就是我要做的

day.json

{"File Name": "dave.json", "File Size": 2800}
{"File Name": "same.json", "File Size": 600}
{"File Name": "emhy.json", "File Size": 600}
{"File Name": "john.json", "File Size": 600}

night.json

{"File Name": "jane.json", "File Size": 2800}
{"File Name": "dave.json", "File Size": 2800}
{"File Name": "emhy.json", "File Size": 600}
{"File Name": "same.json", "File Size": 600}

python代码

import json

def parse_file(file_name):
    with open(file_name) as f:
        return [json.loads(line)['File Name'] for line in f]

new_data = set(parse_file('day.json'))
old_data = set(parse_file('night.json'))

files_both = new_data.intersection(old_data) # files present in both
files_only_old = old_data.difference(new_data) # files in old, but not in new
files_only_new = new_data.difference(old_data) # files in new, but not in old

print(files_both) # {'emhy.json', 'dave.json', 'same.json'}
print(files_only_old) # {'jane.json'}
print(files_only_new) # {'john.json'}

输出

{'emhy.json', 'dave.json', 'same.json'}
{'jane.json'}
{'john.json'}