2012-06-29 5 views
4

나는 다음과 같은 튜플을 가지고있다. output.I에 명시된대로 출력하는 문자열을 만들고 싶다. 'a'에 해당하는 모든 요소를 ​​계산한다. 즉, 얼마나 많은 k1이 'a' 뭐야에 문자열 출력에 있어야이파이썬 튜플 연산과 카운트

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) 

위의 코드는 파이썬 3 인 Counter 클래스는 새로운 파이썬 2.7에서. 이제 원하는 순서로 항목을 재정렬하고 필요할 경우 문자열로 변환 할 수 있습니다.