字典是无序的

你可能希望 Python 字典按键排序,例如 C++ std::map,但事实并非如此:

myDict = {'first': 1, 'second': 2, 'third': 3}
print(myDict)
# Out: {'first': 1, 'second': 2, 'third': 3}

print([k for k in myDict])
# Out: ['second', 'third', 'first']

Python 没有任何内置类可以按键自动对其元素进行排序。

但是,如果排序不是必须的,并且你只希望字典记住其键/值对的插入顺序,则可以使用 collections.OrderedDict

from collections import OrderedDict

oDict = OrderedDict([('first', 1), ('second', 2), ('third', 3)])

print([k for k in oDict])
# Out: ['first', 'second', 'third']

请记住,使用标准字典初始化 OrderedDict 不会以任何方式为你排序字典。这种结构所做的就是保持密钥插入的顺序。

在 Python 3.6改变了字典的实现,以改善它们的内存消耗。这个新实现的副作用是它还保留传递给函数的关键字参数的顺序:

Python 3.x >= 3.6

def func(**kw): print(kw.keys())

func(a=1, b=2, c=3, d=4, e=5) 
dict_keys(['a', 'b', 'c', 'd', 'e']) # expected order 

警告 :请注意 这个新实现的顺序保留方面被视为实现细节,不应该依赖 ,因为它可能在将来发生变化。