为什么python 3中的json.dumps()返回python 2的不同值?

马塞洛·苏亚雷斯

我需要在Python 3中生成MD5哈希值,以与在Python 2中生成的MD5哈希值进行比较,但是json.dumps()的结果是不同的,因为在Python 2上元素的位置发生了变化,而MD5结果为不同。

如何产生相同的结果?

编码:

content = {'name': 'Marcelo', 'age': 30, 'address': {'country': 'Brasil'}, 'interests': [{'id': 1, 'description': 'tecnology'}]}

print('CONTENT:', json.dumps(content))

print('MD5:', md5(str(content).encode('UTF-8')).hexdigest())

Python 2.7结果:

('CONTENT:', {'interests': [{'id': 1, 'description': 'tecnology'}], 'age': 30, 'name': 'Marcelo', 'address': {'country': 'Brasil'}})

('MD5:', 'a396f6997fb420992d96b37e8f37938d')

Python 3.6结果:

CONTENT: {'name': 'Marcelo', 'age': 30, 'address': {'country': 'Brasil'}, 'interests': [{'id': 1, 'description': 'tecnology'}]}

MD5: 40c601152725654148811749d9fc8878

编辑:

我无法更改在Python 2上生成的MD5。有什么方法可以在Python 3上从Python 2重现默认顺序?

爱德华·明尼克斯(Edward Minnix)

在3.6之前的Python中,字典键不排序。因此,在Python 3.6中,键保持其插入顺序(或在字典文字的情况下,它们在文字中的显示方式)。Python 2.7字典是无序的,因此循环顺序不一定与插入顺序匹配。

如果您在两种情况下都重新加载json字典,它将仍然相等(字典相等性不取决于顺序)。

因此,这里没有错误。差异是由于在不同的Python版本中字典的排序方式。

json.dump并按json.dumps字典循环顺序写出键/值对。因此,为了具有一致的循环顺序,最好使用collections.OrderedDict类型以实现一致的顺序。如果您json.load要获取字典,则还需要使用json.loads(text, object_hook=OrderedDict),它将保持顺序。

没有简单的方法可以使Python 3字典使用Python 2排序,因此同时使用2和3代码库OrderedDict是一种更可维护的解决方案。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么b'\ x02'与Python中的值2或int(2)不同?

来自分类Dev

为什么python中字典的keys()以不同的顺序返回?

来自分类Dev

为什么 print(2 == 2.) 在 Python 中返回 True

来自分类Dev

为什么在python2和python3中包含路径不同?

来自分类Python

为什么在Python 3中str(float)返回的位数要比Python 2多?

来自分类Dev

为什么Unicode字符串在Python 2和3中占用的内存不同?

来自分类Dev

python any() 的工作方式不同,为什么 [1,3,5] 中的 any([1,2]) 返回 True 而 ['a','v' 中的 any(['a','b']) 不返回, 'X']?

来自分类Dev

在 Python 列表中,为什么我附加的值与我附加的值不同?

来自分类Python

为什么(1 == 2!= 3)在Python中评估为False?

来自分类Python

为什么在Python 2中''> 0 True?

来自分类Dev

为什么在Python中2 **-1025!= 0.0

来自分类Python

Python:为什么值总是返回0

来自分类Dev

为什么 Python 函数返回错误的值?

来自分类Dev

为什么 Python 函数返回错误的值?

来自分类Dev

为什么Python2和Python3的行为不同

来自分类Dev

为什么Python 3的PrettyPrinter的行为与Python 2的不同,我如何获得相同的行为?

来自分类Dev

Quad函数在python中返回不同的值

来自分类Dev

为什么python2和python3中的print输出使用相同的字符串不同?

来自分类Dev

python中的“ConvexHull”,“alpha_shape”为什么会生成不同的面积值?

来自分类Dev

为什么这些自定义函数在 Python 中打印不同的值?

来自分类Dev

为什么〜9在Python中返回-10

来自分类Android

为什么Android中的sqlite光标返回不同的值?

来自分类Dev

为什么模板函数中的strcmp()返回不同的值?

来自分类Dev

为什么python-chess中的相同函数返回不同的结果?

来自分类Java

为什么按位左移在Python和Java中返回不同的结果?

来自分类Dev

Python:为什么函数中的对象根据调用的方式返回不同的id()?

来自分类Python

为什么Python 3比Python 2慢很多?

来自分类Dev

为什么Swift中的FFT与Python中的FFT不同?

来自分类Dev

为什么python中的PanelOLS与R中的plm结果不同

Related 相关文章

  1. 1

    为什么b'\ x02'与Python中的值2或int(2)不同?

  2. 2

    为什么python中字典的keys()以不同的顺序返回?

  3. 3

    为什么 print(2 == 2.) 在 Python 中返回 True

  4. 4

    为什么在python2和python3中包含路径不同?

  5. 5

    为什么在Python 3中str(float)返回的位数要比Python 2多?

  6. 6

    为什么Unicode字符串在Python 2和3中占用的内存不同?

  7. 7

    python any() 的工作方式不同,为什么 [1,3,5] 中的 any([1,2]) 返回 True 而 ['a','v' 中的 any(['a','b']) 不返回, 'X']?

  8. 8

    在 Python 列表中,为什么我附加的值与我附加的值不同?

  9. 9

    为什么(1 == 2!= 3)在Python中评估为False?

  10. 10

    为什么在Python 2中''> 0 True?

  11. 11

    为什么在Python中2 **-1025!= 0.0

  12. 12

    Python:为什么值总是返回0

  13. 13

    为什么 Python 函数返回错误的值?

  14. 14

    为什么 Python 函数返回错误的值?

  15. 15

    为什么Python2和Python3的行为不同

  16. 16

    为什么Python 3的PrettyPrinter的行为与Python 2的不同,我如何获得相同的行为?

  17. 17

    Quad函数在python中返回不同的值

  18. 18

    为什么python2和python3中的print输出使用相同的字符串不同?

  19. 19

    python中的“ConvexHull”,“alpha_shape”为什么会生成不同的面积值?

  20. 20

    为什么这些自定义函数在 Python 中打印不同的值?

  21. 21

    为什么〜9在Python中返回-10

  22. 22

    为什么Android中的sqlite光标返回不同的值?

  23. 23

    为什么模板函数中的strcmp()返回不同的值?

  24. 24

    为什么python-chess中的相同函数返回不同的结果?

  25. 25

    为什么按位左移在Python和Java中返回不同的结果?

  26. 26

    Python:为什么函数中的对象根据调用的方式返回不同的id()?

  27. 27

    为什么Python 3比Python 2慢很多?

  28. 28

    为什么Swift中的FFT与Python中的FFT不同?

  29. 29

    为什么python中的PanelOLS与R中的plm结果不同

热门标签

归档