首页 > 解决方案 > 如何提取具有相同元素值的列表?

问题描述

我有一个这样的列表列表,data=[["date1","a",14,15],["date1","b",14,15],["date1","c",14,15],["date2","a",14,15],["date2","b",14,15],["date2","c",14,15],["date3","a",14,15],["date3","b",14,15],["date3","c",14,15]] 我想获得具有相同第二个索引的列表。我尝试了这段代码,但是当我只需要 3 个列表时,我得到了 9 个列表。

    data=[["date1","a",14,15],["date1","b",14,15],["date1","c",14,15],["date2","a",14,15],["date2","b",14,15],["date2","c",14,15],["date3","a",14,15],["date3","b",14,15],["date3","c",14,15]]
    for i in  data:
        a=[]
        for j in data:
            if (i[1]==j[1]):
                a.append(j)
        print(a)

我希望得到["date1","a",14,15],["date2","a",14,15],["date3","a",14,15] ["date1","b",14,15],["date2","b",14,15],["date3","b",14,15] ["date1","c",14,15],["date2","c",14,15],["date3","c",14,15]

标签: python-3.x

解决方案


data=[["date1","a",14,15],["date1","b",14,15],["date1","c",14,15],["date2","a",14,15],["date2","b",14,15],["date2","c",14,15],["date3","a",14,15],["date3","b",14,15],["date3","c",14,15]]

from itertools import groupby
from operator import itemgetter

print(
  [list(v) for k,v in groupby(sorted(data, key=itemgetter(1)), key=itemgetter(1))]
)

为了使 groupby 工作,必须对数据进行排序。

根据您的用例,可能不需要迭代器的列表实例化。添加它以查看正确的输出而不是<itertools._grouper... >


推荐阅读