gpt4 book ai didi

python - 字典 __gt__ 和 __lt__ 实现

转载 作者:太空狗 更新时间:2023-10-29 23:58:40 24 4
gpt4 key购买 nike

我一直在试验 Python 字典,发现 __gt____lt__ 是为字典实现的。

我已经对它们进行了测试,它们似乎以某种方式比较了 key ,但我不太清楚这是如何完成的;例如,我不太确定 {1: 1} > {'0': 0} 如何返回 False(事实上,' 0' > 100000 也返回 True)。

这两个功能的具体实现有文档吗?

最佳答案

文档有一个 section on comparisons .特别是:

Objects of different types, except different numeric types and different string types, never compare equal; such objects are ordered consistently but arbitrarily (so that sorting a heterogeneous array yields a consistent result).

行为的原因如下:

>>> '0' < 0
False
>>> 0 < '0'
True

在 CPython 中,选择的“一致但任意”比较方法是按类型名称的字母顺序排序,'str' > 'int':

CPython implementation detail: Objects of different types except numbers are ordered by their type names; objects of the same types that don’t support proper comparison are ordered by their address.

此行为是 altered for Python 3.x并且您不能再比较异构类型(或字典,就此而言):

>>> '0' > 0
Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
'0' > 0
TypeError: unorderable types: str() > int()
>>> {'a': None} > {'b': None}
Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
{'a': None} > {'b': None}
TypeError: unorderable types: dict() > dict()

具体到字典而言,它们是这样排序的:

d1 > d2

变成:

(len(d1) > len(d2) or 
(len(d1) == len(d2) and
sorted(d1.items()) > sorted(d2.items()))

(您可以在 CPython source code 中看到它的实现)。因此,如果它们的长度不同,“更长”的就是“更大”的:

>>> {1: 2, 3: 4} > {1: 2}
True

如果它们有匹配的键,则具有“较大”值的那个是“较大”的:

>>> {1: 2} > {1: 1}
True

如果它们有不匹配的键,则具有“较大”键的那个是“较大”的:

>>> {1: 2} > {2: 1}
False

关于python - 字典 __gt__ 和 __lt__ 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29916585/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com