默認的Python排序是asciibetical
考慮:
>>> c = ['c', 'b', 'd', 'a', 'Z', 0, 4, 2, 1, 3]
默認的排序是:
>>> sorted(c)
[0, 1, 2, 3, 4, 'Z', 'a', 'b', 'c', 'd']
它也不會在所有的Python3工作:
Python 3.4.3 (default, Feb 25 2015, 21:28:45)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.56)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> c = ['c', 'b', 'd', 'a', 'Z', 0, 4, 2, 1, 3]
>>> sorted(c)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unorderable types: int() < str()
解決方案是創建一個帶有索引整數的元組作爲第一個元素(基於項目類型),並將項目本身作爲下一個元素。 Python 2和3將使用第二個元素異構類型對元組進行排序。
考慮:
>>> c = ['c', 'b', 'd', 'a', 'Z', 'abc', 0, 4, 2, 1, 3,33, 33.333]
注意字符,整數,字符串的混合物,浮
def f(e):
d={int:1, float:1, str:0}
return d.get(type(e), 0), e
>>> sorted(c, key=f)
['Z', 'a', 'abc', 'b', 'c', 'd', 0, 1, 2, 3, 4, 33, 33.333]
或者,如果你想有一個拉姆達:基於
>>> sorted(c,key = lambda e: ({int:1, float:1, str:0}.get(type(e), 0), e)))
['Z', 'a', 'abc', 'b', 'c', 'd', 0, 1, 2, 3, 4, 33, 33.333]
來自「狼」的評論,你也可以這樣做:
>>> sorted(c,key = lambda e: (isinstance(e, (float, int)), e))
['Z', 'a', 'abc', 'b', 'c', 'd', 0, 1, 2, 3, 4, 33, 33.333]
我必須承認比較好...
警告:你的第三個例子也不會在Python 3工作。相反,你會得到'TypeError:無法定型的類型:int()
Kevin
2015-03-31 16:37:55