从python中的列表中排序和检索项目

时间:2012-11-24 19:33:47

标签: python list

考虑以下列表:

alist = [[1, 'AAA0'], [2, 'AAAA1'], [3, 'BB2BB2'], [4, 'A3A3'], [5, 'A3A3']]

然后,如果我想根据第二个插槽对列表进行排序,但同时只获取我使用的“A”项:

 from operator import itemgetter
 print str([pt for pt in sorted(alist, key=itemgetter(1)) if 'A' in pt[1]])

我的问题是如何按字母顺序对它们进行排序后,如何先按字符串长度对它们进行分组,然后对相同的字符串进行分组。就像只能检索2'A3A3'一样。

if 'A' in pt[1] 

返回包含'A'的所有项目,而不是包含1'A'的项目。

那么如何将1'A'组合,2'A'组合?

1 个答案:

答案 0 :(得分:0)

您可以使用itertools.groupby自定义键功能对可迭代元素进行分组:

In [1]: from itertools import groupby
In [2]: alist = [[1, 'AAA0'], [2, 'AAAA1'], [3, 'BB2BB2'],
   ...: [4, 'A3A3'], [5, 'A3A3']]
In [3]: key = lambda x: x[1].count('A')
In [4]: for k, g in groupby(sorted(alist, key=key), key=key):
    print k, tuple(g)
   ...:     
0 ([3, 'BB2BB2'],)
2 ([4, 'A3A3'], [5, 'A3A3'])
3 ([1, 'AAA0'],)
4 ([2, 'AAAA1'],)