当前位置:  开发笔记 > 编程语言 > 正文

python中的字典顺序

如何解决《python中的字典顺序》经验,为你挑选了1个好方法。

无论我在哪里搜索,他们都说python词典没有任何顺序.当我运行代码1时,每次显示不同的输出(随机顺序).但是当我运行代码2时,它总是显示相同的排序输出.为什么字典在第二个片段中排序?

   #code 1

    d = {'one': 1, 'two': 2, 'three': 3, 'four': 4}
    for a, b in d.items():
        print(a, b)
   #code 2 

    d = {1: 10, 2: 20, 3: 30, 4: 40}
    for a, b in d.items():
        print(a, b)

输出

代码1:

four 4
two 2
three 3
one 1

代码1:

three 3
one 1
two 2
four 4

代码2(总是):

1 10
2 20
3 30
4 40

Łukasz Rogal.. 12

它与如何应用散列随机化有关.引用文档(强调我的):

缺省情况下,__hash__()STR,字节日期时间 对象被"盐析"与不可预测的随机值.虽然它们在单个Python进程中保持不变,但是在重复调用Python之间它们是不可预测的.

对于每次后续运行,您的字符串(代码段1中的键)都使用不同的salt值进行哈希处理 - 因此哈希值也会更改.哈希值确定排序.

对于int类型,哈希函数永远不会改变 - 实际上哈希总是等于整数值.

assert hash(42) == 42

如果散列函数永远不会更改,则后续运行中的排序不会发生变化.

有关如何实现Python字典的详细信息,您可以参考如何实现Python的内置字典.



1> Łukasz Rogal..:

它与如何应用散列随机化有关.引用文档(强调我的):

缺省情况下,__hash__()STR,字节日期时间 对象被"盐析"与不可预测的随机值.虽然它们在单个Python进程中保持不变,但是在重复调用Python之间它们是不可预测的.

对于每次后续运行,您的字符串(代码段1中的键)都使用不同的salt值进行哈希处理 - 因此哈希值也会更改.哈希值确定排序.

对于int类型,哈希函数永远不会改变 - 实际上哈希总是等于整数值.

assert hash(42) == 42

如果散列函数永远不会更改,则后续运行中的排序不会发生变化.

有关如何实现Python字典的详细信息,您可以参考如何实现Python的内置字典.


哈希并不总是整数上的身份.`-1`哈希到'-2`并且真正大整数的哈希也必须降低,例如`hash(10**20)`
推荐阅读
yzh148448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有