核心对象类型复习和总结——比较、相等和为真——Python 2.X 和 3.X 的字典比较

未匹配的标注

前面章节的倒数第二点也值得说明。在2.X中,字典支持大小比较,好像你在比较排序的"键/值"列表一样:

C:\code> c:\python27\python
>>> D1 = {'a':1, 'b':2}
>>> D2 = {'a':1, 'b':3}
>>> D1 == D2 # Dictionary equality: 2.X + 3.X
False
>>> D1 < D2 # Dictionary magnitude: 2.X only
True

然而,第8章中简要地说明了:字典大小比较在3.X中被移除了,因为当需要相等测试时,它们招致了太多开销(相等测试在3.X中使用了一个优化过的方案,它不会按字面量去比较排序的"键/值"列表):

C:\code> c:\python33\python
>>> D1 = {'a':1, 'b':2}
>>> D2 = {'a':1, 'b':3}
>>> D1 == D2
False
>>> D1 < D2
TypeError: unorderable types: dict() < dict()

3.X中的可选方案是要么编写循环来按键比较值,要么手动比较“键/值”列表——items字典方法和sorted内置函数就足够了:

>>> list(D1.items())
[('b', 2), ('a', 1)]
>>> sorted(D1.items())
[('a', 1), ('b', 2)]
>>>
>>> sorted(D1.items()) < sorted(D2.items()) # Magnitude test in 3.X
True
>>> sorted(D1.items()) > sorted(D2.items())
False

这需要更多代码,但在实践中,大多数需要(比较字典)这个行为的程序将发展出更有效率的方法,而非上面这个变通方法或2.X中的原来的行为。

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 只看当前版本


暂无话题~