튜플 목록을 Python의 DITT로 변환
-
06-07-2019 - |
문제
다음과 같은 튜플 목록이 있습니다.
[
('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를 사용하지 않는다면 괜찮습니다.
제휴하지 않습니다 StackOverflow