2012-05-16 2 views
2

고유 요소에 의해 구성은 말한다 :파이썬 목록 : 나는 튜플의 목록을 사전

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

내가 튜플의 모든 (독특한) 두 번째 요소에 대한 correspoding 값을 얻을 필요가있다. 예를 들어 사전으로. 출력 :

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

뭐하는 가장 파이썬 방법? 많이 appriciated 도와주세요!

답변

4

아마 jamylak 같은 defaultdict에 가고 싶어하지만, 당신이 "진짜"사전을 원한다면, 당신이 사용할 수있는 setdefault() :

기본 비싼 경우
>>> list_of_tuples = [('a', 1),('b',2),('c',1),('a',2),('d',3)] 
>>> d = {} 
>>> for item in list_of_tuples: 
...  d.setdefault(item[1],[]).append(item[0]) 
... 
>>> d 
{1: ['a', 'c'], 2: ['b', 'a'], 3: ['d']} 
3
>>> from collections import defaultdict 
>>> list_of_tuples = [('a', 1),('b',2),('c',1),('a',2),('d',3)] 
>>> d = defaultdict(list) 
>>> for c,num in list_of_tuples: 
     d[num].append(c) 


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

는'defaultdict' 주로 유용 구성; 이것은 빈리스트의 경우는 아니며 보통 dict를 사용하고'd.setdefault (num, []). append (c)'를 수행하는 것이 더 나을 것이다. – lvc

+0

'defaultdict'가 제 의견으로는 더 읽기 쉽습니다. – jamylak

+1

@Ivc : 그럴 수도 있습니다.하지만 성능이 실제로 여기 관련 문제가되지 않으면 defaultdicts를 더 쉽게 이해할 수 있습니다. –