字典是无序的
你可能希望 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
警告 :请注意 “ 这个新实现的顺序保留方面被视为实现细节,不应该依赖 ” ,因为它可能在将来发生变化。