特别是在python中对列表进行分组

时间:2014-03-09 07:37:07

标签: python sorting

嗨,无论如何要对这个列表进行分组,以便它为每个等效的第一个元素返回一个字符串(第一个元素)和一个tuple内的列表?

即,

  

[('106','1','1','43009'),('106','1','2','43179'),('106','1',' 4','43619'),('171','1','3','59111'),('171','1','4','57089'),('171',' 1','5','57079'),('184','1','18','42149'),('184','1','19','12109'),(' 184','1','20','12099')]

成为:

  

[('106',[('106','1','1','43009'),(''106','1','2','43179'),('106' ,'1','4','43619')]),   ('171',[('171','1','3','59111'),('171','1','4','57089'),('171','1' ,'5','57079')]),   ('184'[(('184','1','18','42149'),('184','1','19','12109'),('184','1' ,'20','12099')])

3 个答案:

答案 0 :(得分:0)

如果数据已经排序,那么您可以使用itertools.groupby,就像这样

from itertools import groupby
print [(i,) + (list(g),) for i, g in groupby(data, key=lambda x:x[0])]

<强>输出

[('106',
  [('106', '1', '1', '43009'),
   ('106', '1', '2', '43179'),
   ('106', '1', '4', '43619')]),
 ('171',
  [('171', '1', '3', '59111'),
   ('171', '1', '4', '57089'),
   ('171', '1', '5', '57079')]),
 ('184',
  [('184', '1', '18', '42149'),
   ('184', '1', '19', '12109'),
   ('184', '1', '20', '12099')])]

答案 1 :(得分:0)

你可以用字典做到这一点:

from collections import defaultdict

d = defaultdict(list)

for i in big_list:
   d[i[0]].append(i)

现在,您的密钥可以访问这些项目,这是第一项,您可以按顺序对密钥进行排序并访问字典:

sorted_keys = sorted(d.keys(), key=int)

for key in sorted_keys:
    print(d[key])

答案 2 :(得分:0)

我会使用第一个元素作为键的字典。 另请查看有序词典。