字典是無序的
你可能希望 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
警告 :請注意 “ 這個新實現的順序保留方面被視為實現細節,不應該依賴 ” ,因為它可能在將來發生變化。