要使用该示例,您需要创建以下json文件(test.json
):
{
"/apps/media/efel_data/efel_gui/results/305933/20180515094131/u_res": {
"step_700.0": {
"stimuli": [
{"delay": 620.0, "amp": 700.0, "duration": 1000.0, "totduration": 1300.0},
{"delay": 0.0, "amp": 0.0, "duration": 1300.0, "totduration": 1300.0}
]
}
}
}
并创建一个包含该文件的zip文件(仅用于演示目的)
ls | zip -@ files.zip
假设两个文件都在文件夹temp
中,请运行以下代码:
import zipfile
import json
z = zipfile.ZipFile("temp/files.zip")
with z.open('test.json') as f:
data = json.loads(f.read().decode('utf-8'))
with open('temp/test.json') as f:
expected = json.loads(f.read())
print(data.values())
print(expected.values())
print(data.values()==expected.values())
现在,我需要比较字典的值(因为第一个键的实际代码用法可能不同)。但是,代码的输出(python 3.5.2)表明相同的值不相同:
dict_values([{'step_700.0': {'stimuli': [{'totduration': 1300.0, 'amp': 700.0, 'delay': 620.0, 'duration': 1000.0}, {'totduration': 1300.0, 'amp': 0.0, 'delay': 0.0, 'duration': 1300.0}]}}])
dict_values([{'step_700.0': {'stimuli': [{'totduration': 1300.0, 'amp': 700.0, 'delay': 620.0, 'duration': 1000.0}, {'totduration': 1300.0, 'amp': 0.0, 'delay': 0.0, 'duration': 1300.0}]}}])
False
有什么解释吗?如何解决此问题?
答案 0 :(得分:2)
显然,您的2格相同。例如,如果将dict.values()
转换为list()
,可以确认这一点:
print(list(data.values()) == list(expected.values()))
是
我认为问题在于python 比较 dict.values()
的方式。有趣的是,即使items()
也能正常工作:
print(data.items() == expected.items())
是
您提到您对键不感兴趣,但是keys()
比较也返回True。项目也可能是不可能的,但是很奇怪的是它不会像值比较中那样失败。无论如何,如果开销不大,我建议您转换为列表。不过,如果不确定,我不确定您怎么解决。