从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 :改变这种行为背后的理性是什么?
据我所知,将数字与字符串或其他对象进行比较是有问题的。然而,旧的行为对于实现尊重数值的词典排序是有用的。