Python 3.7中是否会弃用OrderedDict?

130
Python 3.7更新日志中得知:

dict对象维护插入顺序的特性已被声明为Python语言规范的一部分。

这是否意味着OrderedDict将变得多余?我能想到的唯一用途是保持向后兼容,以便与不维护普通字典插入顺序的旧版本Python兼容。

参见:https://dev59.com/iFsX5IYBdhLWcg3wCLyx - user3064538
1个回答

198
在Python 3.7中,OrderedDict并不会变得多余,因为它不仅是保留插入顺序的dict,而且还提供了一个与顺序相关的方法OrderedDict.move_to_end(),并支持reversed()迭代*。
此外,OrderedDict和其他对象进行相等比较时区分顺序,在Python 3.7中dict仍然不支持这一特性,例如:
>>> OrderedDict([(1,1), (2,2)]) == OrderedDict([(2,2), (1,1)]) 
False
>>> dict([(1,1), (2,2)]) == dict([(2,2), (1,1)]) 
True

两个相关的问题在这里在这里

* Python 3.8增加了对常规Python dictreversed()迭代的支持,请参见issue33462


11
在比较时,关于顺序敏感性的观点在这里非常合理。 - Tim Skov Jacobsen
非常感谢您的解释。我相信,在3.8版本中,这种差异已经不存在了。 - leggewie
5
在Python 3.8(以及3.9)中,关于相等比较的差异仍然存在于OrderedDict和常规dict之间 - 我不认为这会很快改变。 - Chris_Rands

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接