Skip to main content
 首页 » 编程设计

python之如何根据每个子列表中的公共(public)键创建新的子列表层以便对子列表进行分类

2025年05月04日15thcjp

如何根据每个子列表中的公共(public)键创建新的子列表层以便对子列表进行分类?换句话说,如何将子列表放入索引 1 处的每个项目都相同的列表中的新子列表中?

例如,我想将以下子列表列表转换为子列表列表,其中每个子列表都在一个新的子列表中,其中索引 1 处的每个项目在该子列表中都是相同的。我想把这个列表中的苹果、香蕉和橘子的子列表放到一个新的子列表中。

lsta = [['2014W01','apple',21,'apple@gmail.com'],['2014W02','apple',19,'apple@g.com'],['2014W02','banana',51,'b@gmail.com'],['2014W03','apple',100,'apple@gmail.com'],['2014W01','banana',71,'b@yahoo.com'],['2014W02','organge',21,'organge@gmail.com']] 

我希望苹果的三个子列表包含在一个新的子列表中,以及香蕉的两个子列表包含在一个新的子列表中,等等。

Desired_List = [[['2014W01','apple',21,'apple@gmail.com'],['2014W02','apple',19,'apple@g.com'],['2014W03','apple',100,'apple@gmail.com']],[['2014W02','banana',51,'b@gmail.com'],['2014W01','banana',71,'b@yahoo.com']],[['2014W02','organge',21,'organge@gmail.com']]] 

奖励积分,如果你能告诉我如何进行多重分类(例如,不仅按水果类型分类,而且按周分类)?

请您参考如下方法:

In [43]: import itertools as IT 
 
In [44]: import operator 
 
In [46]: [list(grp) for key, grp in IT.groupby(sorted(lsta, key=operator.itemgetter(1)), key=operator.itemgetter(1))] 
Out[46]:  
[[['2014W01', 'apple', 21, 'apple@gmail.com'], 
  ['2014W02', 'apple', 19, 'apple@g.com'], 
  ['2014W03', 'apple', 100, 'apple@gmail.com']], 
 [['2014W02', 'banana', 51, 'b@gmail.com'], 
  ['2014W01', 'banana', 71, 'b@yahoo.com']], 
 [['2014W02', 'organge', 21, 'organge@gmail.com']]]