Python如何处理混合类型的字典键排序,为什么?

Python如何处理混合类型的字典键排序,为什么?,python,dictionary,Python,Dictionary,我试图创建一个字典,其中索引是字符串('20'和'0')和整数(10和11)的混合,但每次打印字典时,输出似乎都会随机变化。我已经读到python中的字典应该维护插入到字典中的元素的顺序,那么为什么会发生这种元素的混乱呢 arr = {}; arr['20'] = "hello" arr['0'] = "hey" arr[10] = "hi" arr[11] = "yo" print(arr) 我预计产出为: {'20: 'hello', '0': 'hey', 10: 'hi', 11:

我试图创建一个字典,其中索引是字符串('20'和'0')和整数(10和11)的混合,但每次打印字典时,输出似乎都会随机变化。我已经读到python中的字典应该维护插入到字典中的元素的顺序,那么为什么会发生这种元素的混乱呢

arr = {};
arr['20'] = "hello"
arr['0'] = "hey"
arr[10] = "hi"
arr[11] = "yo"

print(arr)
我预计产出为:

{'20: 'hello', '0': 'hey', 10: 'hi', 11: 'yo'}
但输出结果是对数组中的每个元素重新排序,并将10和11转换为字符串:

{'20': 'hello', 10: 'hi', 11: 'yo', '0': 'hey'}

为了澄清,您使用的数据结构是python“字典”而不是数组。它将键映射到值。Python字典没有内部顺序,因此它只会按照您输入的顺序打印

如果希望词典有序,可以使用一种称为OrderedDict的结构:

from collections import OrderedDict
exampleDict = OrderedDict([('a', 1), ('b', 2), ('c', 3), ('d', 4)])

我在我的机器上得到
{'20':'hello','0':'hey',10'hi',11'yo'}
。和10和11不是正在显示的输出中的字符串。我想你可能会感到困惑。请注意,这不是数组,这是字典。“{}”不创建数组,它创建字典。Python字典中的元素不是按顺序排列的。自Python 3.7以来,Python字典是按“插入顺序”排列的。我找不到详细解释这种行为的好参考,但文档中偶尔会提到: