【发布时间】:2020-02-13 05:18:15
【问题描述】:
从 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)
问题:这种行为背后的原因是什么?为什么 dicts 不可逆?未来是否有计划改变这种行为?
解决方法当然有效:
for k in reversed(list(d.keys())):
print(k)
(*) 事实上,python 3.6 的典型安装已经是这种情况,如this post 中所述。
更新:以python 3.8 开头的字典实际上是可逆的。接受的答案是指 Guido 和其他核心开发人员之间的讨论导致了这个决定。简而言之,他们将语言一致性与实施工作和对用户的实际利益进行了权衡。
【问题讨论】:
标签: python-3.x dictionary