按类型对python-list中的元素进行分组

时间:2019-12-02 14:25:54

标签: python list

我有一个异构列表,我想按类型对元素进行分组。

比方说,我有:

l = [[], 1, 2, 'a', 3, 'b', [5, 6]]

我想要:

l = [[[], [5, 6]], [1, 2, 3], ['a', 'b']]

顺序并不重要的地方。

执行此操作的python-ic方法是什么?

我不希望循环内的循环。

谢谢!

2 个答案:

答案 0 :(得分:4)

使用collections.defaultdict

from collections import defaultdict

l = [[], 1, 2, 'a', 3, 'b', [5, 6]]

accumulation = defaultdict(list)
for e in l:
    accumulation[type(e)].append(e)

result = list(accumulation.values())
print(result)

输出

[[[], [5, 6]], [1, 2, 3], ['a', 'b']]

您也可以使用setdefault

accumulation = {}
for e in l:
    accumulation.setdefault(type(e), []).append(e)

答案 1 :(得分:0)

您可以使用内置的type执行以下操作,该操作为您提供列表或字典作为返回值的选择:

l = [[], 1, 2, 'a', 3, 'b', [5, 6]]

rv = dict()

for thing in l:
    if type(thing) in rv:
        rv[type(thing)].append(thing)
    else:
        rv[type(thing)] = [thing]

print([x for x in rv.values()])

输出:

[[[], [5, 6]], [1, 2, 3], ['a', 'b']]

或:

>>> rv
{list: [[], [5, 6]], int: [1, 2, 3], str: ['a', 'b']}