首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据python中的条件将子列表分别分组在列表中。

根据python中的条件将子列表分别分组在列表中。
EN

Stack Overflow用户
提问于 2019-01-02 11:42:28
回答 3查看 2.9K关注 0票数 3

我有个子目录

代码语言:javascript
复制
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]]

如果每个子列表相同的话,我想根据每个子列表的第一个元素在列表中做单独的子列表。输出如下所示

代码语言:javascript
复制
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条件,但它不起作用。帮帮我

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-01-02 11:45:59

使用itertools.groupby

Ex:

代码语言:javascript
复制
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)

输出:

代码语言:javascript
复制
[[['RD-2', 'a', 120], ['RD-2', 'b', 125], ['RD-2', 'c', 127]], [['RD-3', 'a', 120], ['RD-3', 'b', 140]], [['RD-5', 'a', 120]]]
票数 5
EN

Stack Overflow用户

发布于 2019-01-02 11:47:59

由于不需要使用collections.defaultdict,所以可以使用

代码语言:javascript
复制
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]]]]
票数 2
EN

Stack Overflow用户

发布于 2019-01-02 11:45:52

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

代码语言:javascript
复制
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)

输出

代码语言:javascript
复制
[[['RD-2', 'a', 120], ['RD-2', 'b', 125], ['RD-2', 'c', 127]], [['RD-3', 'a', 120], ['RD-3', 'b', 140]], [['RD-5', 'a', 120]]]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54005718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档