我有一个异构列表,我想按类型对元素进行分组。
比方说,我有:
l = [[], 1, 2, 'a', 3, 'b', [5, 6]]
我想要:
l = [[[], [5, 6]], [1, 2, 3], ['a', 'b']]
顺序并不重要的地方。
执行此操作的python-ic方法是什么?
我不希望循环内的循环。
谢谢!
答案 0 :(得分:4)
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']}