是否有一个命令可以按数据类型对Python列表进行排序?

时间:2017-11-07 14:18:55

标签: python python-3.x

给出以下列表:

l = [True, 3, 7.3, (5,6), True, 'orange', 25, 'banana', False, (4,5), 9.2]

包含多种类型的混合物:

for element in l:
    print (type(element))

输出:

<class 'bool'>
<class 'int'>
<class 'float'>
<class 'tuple'>
<class 'bool'>
<class 'str'>
<class 'int'>
<class 'str'>
<class 'bool'>
<class 'tuple'>
<class 'float'>

是否有一个命令可以根据类型对其进行排序,也就是说,这些类型会按类别进行排序?

3 个答案:

答案 0 :(得分:3)

您可以使用类型的字符串表示形式进行排序:

>>> sorted(l, key=lambda x: str(type(x)))
[True, True, False, 7.3, 9.2, 3, 25, 'orange', 'banana', (5, 6), (4, 5)]

类似的类型将分组一起维护它们出现的初始顺序。

在Python 2中,可以直接对类型对象进行排序,并且可以直接将type作为关键函数传递:

>>> sorted(l, key=type)
[True, True, False, 7.3, 9.2, 3, 25, 'orange', 'banana', (5, 6), (4, 5)]

答案 1 :(得分:3)

更可读的解决方案(连同密钥):

s = sorted([(x, x.__class__.__name__) for x in l], key=lambda x: x[1])
print(s)

答案 2 :(得分:1)

以@ omu_negru的解决方案为基础 -

groups = dict()
for element in l:
    element_type = element.__class__.__name__
    if element_type not in groups:
        groups[element_type] = list()
    groups[element_type].append(element)
print(groups)
#  groups - {'bool': [True, True, False], 'float': [7.3, 9.2], 'int': [3, 25], 'str': ['orange', 'banana'], 'tuple': [(5, 6), (4, 5)]}