【问题标题】: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?和其他此类帖子密切相关。

标签: python python-3.x


【解决方案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 of dict_equal()version in Python 2 本质上没有区别;只有 Python 2 中的 dict_compare 实现在这里真正不同(在 Py 3 中不存在)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-03
  • 2019-12-10
  • 2018-08-17
  • 2016-04-06
  • 1970-01-01
相关资源
最近更新 更多