2012-11-24 101 views
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'一樣。

if 'A' in pt[1] 

返回了包含 'A' 不是與1 'A' 以外的所有項目。

那麼我如何將那些1'A',2'A'等的人分組?

+0

嘗試這樣做: - 如果'PT [1] .Count之間( 'A')== 1'? –

+0

只是。謝謝 ! –

+0

@PavAmetvic ..那麼,你能用它解決這個問題嗎? –

回答

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'],) 
+0

嗨列弗,感謝您的回覆。我不明白'lambda',但我會更多地閱讀它,看起來像是一次性的簡單功能。 –

+0

@PavAmetvic正好,只是保存了一些空間。可以寫'def key(x):return x [1] .count('A')'。關於lambda的最酷的事情是你可以定義它們而不給它們任何名字,但是在這裏我需要使用它兩次,所以我把它分配給一個變量(=定義了一個通常的命名函數)。 –

+0

一個更快的問題: 如果我想通過計數'A'然後計數'B'和整數(數字)的計數,那麼正確的語法是什麼? 類似-----> x [1] .count('A','B')? –