我有个子目录
list=[['RD-2','a',120],
['RD-2','b',125],
['RD-2','c',127],
['RD-3','a',120],
['RD-3','b',140],
['RD-5','a',120]]如果每个子列表相同的话,我想根据每个子列表的第一个元素在列表中做单独的子列表。输出如下所示
finallist=[
[['RD-2','a',120],['RD-2','b',125],['RD-2','c',127]],
[['RD-3','a',120],['RD-3','b',140]],
['RD-5','a',120]]我试过使用if条件,但它不起作用。帮帮我
发布于 2019-01-02 11:45:59
使用itertools.groupby
Ex:
from itertools import groupby
lst=[['RD-2','a',120],['RD-2','b',125],['RD-2','c',127],['RD-3','a',120],['RD-3','b',140],['RD-5','a',120]]
res = [list(v) for i, v in groupby(lst, lambda x: x[0])] #GroupBy first element.
print(res)输出:
[[['RD-2', 'a', 120], ['RD-2', 'b', 125], ['RD-2', 'c', 127]], [['RD-3', 'a', 120], ['RD-3', 'b', 140]], [['RD-5', 'a', 120]]]发布于 2019-01-02 11:47:59
由于不需要使用collections.defaultdict,所以可以使用
from collections import defaultdict
L = [['RD-2','a',120],['RD-2','b',125],['RD-2','c',127],
['RD-3','a',120],['RD-3','b',140],['RD-5','a',120]]
dd = defaultdict(list)
for key, value1, value2 in L:
dd[key].append([value1, value2])
## Python 3.x, use * unpacking
# for key, *values in L:
# dd[key].append(values)
res = [[[key, value] for value in values] for key, values in dd.items()]
print(res)
# [[['RD-2', ['a', 120]], ['RD-2', ['b', 125]], ['RD-2', ['c', 127]]],
# [['RD-3', ['a', 120]], ['RD-3', ['b', 140]]],
# [['RD-5', ['a', 120]]]]发布于 2019-01-02 11:45:52
如果组始终是连续的,则可以使用群比,否则可以根据第一个元素对子列表进行排序,然后按组排序:
from itertools import groupby
from operator import itemgetter
lst=[['RD-2','a',120],['RD-2','b',125],['RD-2','c',127],['RD-3','a',120],['RD-3','b',140],['RD-5','a',120]]
result = [list(v) for _, v in groupby(lst, key=itemgetter(0))]
print(result)输出
[[['RD-2', 'a', 120], ['RD-2', 'b', 125], ['RD-2', 'c', 127]], [['RD-3', 'a', 120], ['RD-3', 'b', 140]], [['RD-5', 'a', 120]]]https://stackoverflow.com/questions/54005718
复制相似问题