【问题标题】:Why do dicts compare greater than any int? [duplicate]为什么dicts比较大于任何int? [复制]
【发布时间】:2017-05-12 19:01:08
【问题描述】:

我的代码不小心使用不等式将 dict 与 int 进行了比较,结果发现任何 dict 在测试大于 int 时都会评估 True。

d = {'a': 1, 'b': 2}
d > 0
Out[20]: True
d > 10e99999999999999
Out[21]: True

为什么会发生这种情况而不是类型错误?

这发生在 Python 2.7 上运行

【问题讨论】:

  • 你能添加你用来测试的代码吗?
  • @toonarmycaptain 真的吗? python -c "{} > 1"
  • 无法在 python 3 中重现
  • @Shashwat 他们删除了 Python3 中的字典大小比较
  • @toonarmycaptain 什么是“字典大小比较”???

标签: python python-2.7 dictionary inequality


【解决方案1】:

来自Python 2.7 documentation

不同类型的对象,除了不同的数值类型和不同的字符串类型,从不比较相等;此类对象的顺序一致但随意(因此对异构数组进行排序会产生一致的结果)。

Python 3.3 documentation 改为:

和 >= 运算符将引发 TypeError 异常,当将复数与另一个内置数字类型进行比较时,当对象属于不同类型时无法比较,或者在其他没有定义顺序的情况下。

从 Python 3 开始,您所看到的不再是可能的意思,而是像您预期的那样产生TypeError

【讨论】:

    【解决方案2】:

    首先,Python 团队同意你的看法——在 Python 3 中,这是一个错误。

    在早期的 Python 版本中,所有内容都可以相互比较,为了保持一致,某些类型总是排在其他类型之前。

    【讨论】:

      【解决方案3】:

      显然在 Python 2.7 中字典总是大于整数。显然是按字母顺序排列的?

      【讨论】:

        猜你喜欢
        • 2014-08-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-12
        • 2015-09-26
        • 1970-01-01
        • 2016-10-22
        • 1970-01-01
        相关资源
        最近更新 更多