如何在python3.x中对混合类型序列(例如数字和字符串)进行排序?

时间:2018-04-30 09:33:40

标签: python python-3.x sorting

从python2迁移到python3时,我注意到在python3中对混合类型序列进行排序是不可能的。

# Python2.7:
sorted(['foo', 'bar', 10, 200, 3])     
# => [3, 10, 200, 'bar', 'foo']

# Python3.6
sorted(['foo', 'bar', 10, 200, 3])
# => TypeError: '<' not supported between instances of 'str' and 'int'

问题1 。有没有办法切换回旧的行为?这对我的需求非常有用。特别是,以下对我来说不起作用,因为数字排序是错误的:

# Python2/3
sorted(map(str,['foo', 'bar', 10, 200, 3]))
# => ['10', '200', '3', 'bar', 'foo']

这是语言规范的一个很大的变化,可能会破坏很多东西。 问题2 :改变这种行为背后的理性是什么?

据我所知,将数字与字符串或其他对象进行比较是有问题的。然而,旧的行为对于实现尊重数值的词典排序是有用的。

0 个答案:

没有答案