为啥字典大小比较被删除了?
Posted
技术标签:
【中文标题】为啥字典大小比较被删除了?【英文标题】:Why were dictionary magnitude comparisons removed?为什么字典大小比较被删除了? 【发布时间】:2014-09-13 17:13:43 【问题描述】:只是好奇,仅此而已。为什么在 Python3 中删除了字典大小比较 (> < >= <=
)?删除它们的原因是什么?
例如:dictA > dictB
【问题讨论】:
什么是字典大小比较? 我猜它类似于if dict_a > dict_b:
,它在 Python 2 中运行,但在 Python 3 中提供 TypeError: unorderable types
。
你可以尝试搜索相关的提交历史,这是公开的。它可能包含基本原理、PEP 链接或对邮件列表讨论的引用。
你的意思是simplification of ordering comparisons?这是在 Python 3.0 中完成的。
如果是这样,那么这与Is everything greater than None?和其他此类帖子密切相关。
【参考方案1】:
任意比较排序已从 Python 3 中移除,请参阅 Ordering Comparisons in the What's New in Python 3.0 documentation。
字典之间没有有意义的自然排序。 Python 2 只是假装可以很好地对混合列表进行排序,但这只会导致巨大的混乱。
以比较字符串和整数为例;在 Python 中,整数总是比字符串小:
>>> 10 < "10"
True
无论如何,许多初学者都会尝试将字符串与整数进行比较;很自然地使用number = raw_input('Pick a number! ')
,然后尝试将其与整数进行比较;有时这会看起来就像它正在工作一样!在 Python 3 中,这现在是一个错误。
这同样适用于大多数对象;除非他们明确定义比较方法(__lt__
、__gt__
等),否则这些类型是不可排序的。这包括字典。
【讨论】:
根据 Mark Lutz 的“Learning Python”:“在 Python 3.X 中删除了字典的大小比较,因为在需要相等时它们会产生过多的开销”。所以我不明白,它们是出于有意义的原因还是出于性能原因而被删除? @antox:Python 2 的比较代码相当随意;字典没有自然的顺序。我不同意 Lutz 关于为什么将其删除的说法。 我不知道它是否有帮助,但它继续说:“......当需要平等时(平等使用 3.X 中的优化方案,它不会真正比较排序的键/值列表)” @antox:Python 3 version ofdict_equal()
与version in Python 2 本质上没有区别;只有 Python 2 中的 dict_compare
实现在这里真正不同(在 Py 3 中不存在)。以上是关于为啥字典大小比较被删除了?的主要内容,如果未能解决你的问题,请参考以下文章