[英]sort and retrieve items from a list in python
考虑以下列表:
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'的那些进行分组?
您可以使用itertools.groupby
通过自定义键功能将iterable的元素分组:
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'],)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.