Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么在python 3.5.2中比较相同的dict值会返回False?_Python_Json_Zip - Fatal编程技术网

为什么在python 3.5.2中比较相同的dict值会返回False?

为什么在python 3.5.2中比较相同的dict值会返回False?,python,json,zip,Python,Json,Zip,为了使用该示例,您需要创建以下json文件(test.json): 并创建包含此单个文件的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/tes

为了使用该示例,您需要创建以下json文件(
test.json
):

并创建包含此单个文件的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())
现在,我需要比较dict的值(因为第一个键在实际代码使用中可能不同)。但是,代码(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

有什么解释发生了什么,以及我如何解决这个问题吗?

很明显,你的两个指令是相同的。如果您将
dict.values()
转换为
list()
可以确认这一点,例如:

print(list(data.values()) == list(expected.values()))
真的

我认为问题在于python比较
dict.values()
的方式。有趣的是,即使是
items()
也能正常工作:

print(data.items() == expected.items())
真的


您提到您对键不感兴趣,但是
keys()
比较也会返回True。项目也可能是不可能的,但奇怪的是,它并不像在值比较中那样失败。无论如何,作为一种解决方法,如果开销不太大,我建议将其转换为列表。如果有问题,我不知道你怎么解决。

很明显,你的两条指令是相同的。如果您将
dict.values()
转换为
list()
可以确认这一点,例如:

print(list(data.values()) == list(expected.values()))
真的

我认为问题在于python比较
dict.values()
的方式。有趣的是,即使是
items()
也能正常工作:

print(data.items() == expected.items())
真的


您提到您对键不感兴趣,但是
keys()
比较也会返回True。项目也可能是不可能的,但奇怪的是,它并不像在值比较中那样失败。无论如何,作为一种解决方法,如果开销不太大,我建议将其转换为列表。如果有,我不确定你如何解决它。

你有很多浮点数,所以可能是浮点数不精确?至少它与python 2一起工作没有问题…你有很多浮点数,所以可能是浮点数不精确?至少它与python 2一起工作没有问题。。。