1

次のリストを検討してください。

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

次に、2番目のスロットに従ってリストを並べ替えたいが、同時に「A」が含まれているアイテムのみを取得する場合は、次を使用します。

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

私の質問は、アルファベット順に並べ替えた後、最初に文字列の長さでグループ化し、次に同じものをグループ化する方法です。2'A3A3'のみを取得できるように。

the

if 'A' in pt[1] 

1'A'を持つアイテムではなく、'A'を含むすべてのアイテムを返します。

では、1'A'のもの、2'A'のものなどをグループ化するにはどうすればよいですか?

4

1 に答える 1

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'],)
于 2012-11-24T19:47:45.657 に答える