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

2024-04-29 14:34:21 发布

您现在位置:Python中文网/ 问答频道 /正文

为了使用该示例,您需要创建以下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())

现在,我需要比较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

有什么解释吗?我如何解决这个问题


Tags: 文件代码testjsondatastepziptemp
1条回答
网友
1楼 · 发布于 2024-04-29 14:34:21

很明显,你的两个字典是一样的。如果将dict.values()转换为list(),则可以确认这一点,例如:

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

True

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

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

True

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

相关问题 更多 >