无论我在哪里搜索,他们都说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)
Run Code Online (Sandbox Code Playgroud)
输出
代码1:
four 4
two 2
three 3
one 1
Run Code Online (Sandbox Code Playgroud)
代码1:
three 3
one 1
two 2
four 4
Run Code Online (Sandbox Code Playgroud)
代码2(总是):
1 10
2 20
3 30
4 40
Run Code Online (Sandbox Code Playgroud)
Łuk*_*ski 12
它与如何应用散列随机化有关.引用文档(强调我的):
缺省情况下,
__hash__()值STR,字节和日期时间 对象被"盐析"与不可预测的随机值.虽然它们在单个Python进程中保持不变,但是在重复调用Python之间它们是不可预测的.
对于每次后续运行,您的字符串(代码段1中的键)都使用不同的salt值进行哈希处理 - 因此哈希值也会更改.哈希值确定排序.
对于int类型,哈希函数永远不会改变 - 实际上哈希总是等于整数值.
assert hash(42) == 42
Run Code Online (Sandbox Code Playgroud)
如果散列函数永远不会更改,则后续运行中的排序不会发生变化.
有关如何实现Python字典的详细信息,您可以参考如何实现Python的内置字典.
| 归档时间: |
|
| 查看次数: |
216 次 |
| 最近记录: |