2012-06-29 67 views
4

我有以下元組。我想要創建一個字符串,其輸出如輸出中所述。我要計算所有對應於'a'的元素,即多少個k1發生wrt'a'等對何爲做到這一點Python元組操作和計數

a=[('a','k1'),('b','k2'),('a','k2'),('a','k1'),('b','k2'),('a','k1'),('b','k2'),('c','k3'),('c','k4')] 

輸出應該在一個字符串輸出的最簡單的方法=「」

a k1 3 
a k2 1 
b k1 1 
b k2 3 
c k3 1 
c k4 1 

回答

2

你可以用defaultdict容易做加法部分。默認字典的工作方式與普通字典相似,只是它具有空密鑰存儲區的默認值,因此您可以在迭代數據集時輕鬆增加計數器。

a=[('a','k1'),('b','k2'),('a','k2'),('a','k1'),('b','k2'),('a','k1'),('b','k2'),('c','k3'),('c','k4')] 
from collections import defaultdict 
b = defaultdict(int) 
for item in a: 
    b[item] += 1 

print b 
defaultdict(<type 'int'>, {('a', 'k2'): 1, ('c', 'k3'): 1, ('b', 'k2'): 3, ('a', 'k1'): 3, ('c', 'k4'): 1}) 

而對於漂亮的打印它,只是迭代結果數據並打印它如何你想要的。

for key, value in b.iteritems(): 
    print '%s %s %s' % (key[0], key[1], value) 
+0

一些解釋爲什麼這個作品會很好。 – millimoose

+0

+1非常簡單。我只是寫了相同的代碼:)))) –

+2

collections.Counter更適合這裏 –

5

collections使用Counter類:

>>> a = [('a', 'k1'), ('b', 'k2'), ('a', 'k2'), ('a', 'k1'), ('b', 'k2'), ('a', 'k1'), ('b', 'k2'), ('c', 'k3'), ('c', 'k4')] 
>>> from collections import Counter 
>>> c = Counter(a) 
Counter({('b', 'k2'): 3, ('a', 'k1'): 3, ('a', 'k2'): 1, ('c', 'k3'): 1, ('c', 'k4'): 1}) 

您可以使用c.items()遍歷計數:

>>> for item in c.items(): 
...  print(item) 
... 
(('a', 'k2'), 1) 
(('c', 'k3'), 1) 
(('b', 'k2'), 3) 
(('a', 'k1'), 3) 
(('c', 'k4'), 1) 

上面的代碼是Python的3 Counter類是新的在Python 2.7中。現在您可以按照需要的順序重新排列項目,並根據需要將它們轉換爲字符串。