相关疑难解决方法(0)

如何在Python 3.x中获得类似2.x的排序行为?

我试图复制(如果可能改善)的Python 2.x的在3.x的排序行为,使双方可订购的类型,如int,float等进行排序预期,并且互相unorderable类型的输出中进行分组.

这是我正在谈论的一个例子:

>>> sorted([0, 'one', 2.3, 'four', -5])  # Python 2.x
[-5, 0, 2.3, 'four', 'one']
Run Code Online (Sandbox Code Playgroud)
>>> sorted([0, 'one', 2.3, 'four', -5])  # Python 3.x
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unorderable types: str() < int()
Run Code Online (Sandbox Code Playgroud)

我之前尝试过这个,使用一个关键参数的类sorted()(参见 为什么这个用于排序异构序列的关键类表现奇怪?)从根本上被打破了,因为它的方法是

  1. 试图比较价值,和
  2. 如果失败,则回退到比较其类型的字符串表示

BrenBarn的出色答案所解释的那样,可以导致不及物处理.

我最初在没有尝试编码的情况下拒绝的一种天真的方法是使用返回(type, value)元组的键函数:

def motley(value):
    return repr(type(value)), value
Run Code Online (Sandbox Code Playgroud)

但是,这不符合我的要求.首先,它打破了相互可订购类型的自然顺序:

>>> sorted([0, 123.4, 5, -6, 7.89])
[-6, 0, 5, 7.89, 123.4]
>>> sorted([0, …
Run Code Online (Sandbox Code Playgroud)

python sorting python-2.x python-3.x

54
推荐指数
3
解决办法
3960
查看次数

标签 统计

python ×1

python-2.x ×1

python-3.x ×1

sorting ×1