代码之家  ›  专栏  ›  技术社区  ›  learningstudent

根据python中的条件,在列表中单独分组子列表

  •  1
  • learningstudent  · 技术社区  · 7 年前

    我有子主义者

    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]]
    

    我试过在Forloop使用if条件,但它不起作用。 帮助我

    3 回复  |  直到 7 年前
        1
  •  2
  •   Rakesh    7 年前

    使用 itertools.groupby

    前任:

    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]]]
    
        2
  •  2
  •   jpp    7 年前

    无需订购,您可以使用 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]]]]
    
        3
  •  0
  •   Dani Mesejo    7 年前

    如果组总是连续的,则可以使用 groupby ,否则,可以根据第一个元素对子列表进行排序,然后分组:

    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]]]