从3.7版本开始,标准Python字典保证维护插入顺序。 (*)
d = {'b': 1, 'a': 2}
for k in d:
print(k)
# Prints always 'b' before 'a'.
换句话说,字典键以严格的顺序保留。原则上,这将允许键可逆。然而,以下任何操作都不起作用:
# TypeError: 'dict' object is not reversible
for k in reversed(d):
print(k)
# TypeError: 'dict_keys' object is not reversible
for k in reversed(d.keys()):
print(k)
问题: 这种行为背后的推理是什么?为什么字典不能被反转?是否有计划在将来更改这种行为?当然,解决方法有效:
for k in reversed(list(d.keys())):
print(k)
(*) 实际上,这已经是Python 3.6的典型安装情况,如此帖所述。
更新: 从Python 3.8开始,字典确实是可逆的。被接受的答案涉及了Guido和其他核心开发人员之间的讨论,这导致了这个决定。简而言之,他们权衡了语言的一致性、实现的努力和实际用户的收益。
dict
对象没有排序(至少不能从语言上保证),因此reversed
也没有意义。 - FlyingTeller__reversed__
方法呢?”Python开发者的链接有一些有用的内容,但相关部分应该直接在答案中复制(因为这样的外部链接往往会失效)。 - wim