字典是無序的

你可能希望 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 

警告 :請注意 這個新實現的順序保留方面被視為實現細節,不應該依賴 ,因為它可能在將來發生變化。