문제

다음과 같은 튜플 목록이 있습니다.

[
('a', 1),
('a', 2),
('a', 3),
('b', 1),
('b', 2),
('c', 1),
]

첫 번째 항목 으로이 키를 반복하고 싶습니다. 예를 들어 다음과 같은 것을 인쇄 할 수 있습니다.

a 1 2 3
b 1 2
c 1

첫 번째 아이템이 튜플을 반복하는 것과 동일한 지 추적하기 위해 아이템을 유지하지 않고 어떻게해야합니까? 이것은 다소 지저분한 느낌이 듭니다 (또한 시작하려면 목록을 정렬해야합니다) ...

도움이 되었습니까?

해결책

l = [
('a', 1),
('a', 2),
('a', 3),
('b', 1),
('b', 2),
('c', 1),
]

d = {}
for x, y in l:
    d.setdefault(x, []).append(y)
print d

생산 :

{'a': [1, 2, 3], 'c': [1], 'b': [1, 2]}

다른 팁

약간 단순한 ...

>>> from collections import defaultdict
>>> fq= defaultdict( list )
>>> for n,v in myList:
        fq[n].append(v)

>>> fq
defaultdict(<type 'list'>, {'a': [1, 2, 3], 'c': [1], 'b': [1, 2]})

GroupBy를 사용한 솔루션

    >>> from itertools import groupby
    >>> l = [('a',1), ('a', 2),('a', 3),('b', 1),('b', 2),('c', 1),]
    >>> [(label, [v for l,v in value]) for (label, value) in groupby(l, lambda x:x[0])]
    [('a', [1, 2, 3]), ('b', [1, 2]), ('c', [1])]

Groupby (l, lambda x : x [0])는 [ 'a', [ 'a', 1), ...], c, [( 'c', 1)],. ..]

첫 번째 항목별로 튜플 그룹화 목록을 인쇄하십시오

이 답변은 다음을 기반으로합니다 @gommen one.

#!/usr/bin/env python

from itertools import groupby
from operator  import itemgetter

L = [
('a', 1),
('a', 2),
('a', 3),
('b', 1),
('b', 2),
('c', 1),
]

key = itemgetter(0)
L.sort(key=key) #NOTE: use `L.sort()` if you'd like second items to be sorted too
for k, group in groupby(L, key=key):
    print k, ' '.join(str(item[1]) for item in group)

산출:

a 1 2 3
b 1 2
c 1

나는 단지 기본을 할 것입니다

answer = {}
for key, value in list_of_tuples:
  if key in answer:
    answer[key].append(value)
  else:
    answer[key] = [value]

이것이 짧다면, 왜 복잡한 것을 사용하십시오. 물론 SetDefault를 사용하지 않는다면 괜찮습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top