python 파이썬 - 키당 여러 값으로 사전 변환 목록에 표시 하시겠습니까?




리스트 자료형 (5)

dict 값으로 튜플 대신 목록 사용 :

l=[ [1, 'A'], [1, 'B'], [2, 'C'] ]
d={}
for key, val in l:
    d.setdefault(key, []).append(val)

print d

키 / 값 쌍을 보유하는 파이썬 목록이 있습니다.

l=[ [1, 'A'], [1, 'B'], [2, 'C'] ]

나는리스트를 사전으로 변환하기를 원한다. 여기서 키 당 여러 개의 값이 튜플로 집계된다.

{ 1:('A', 'B'), 2:('C',) }

반복적 인 해결책은 간단합니다.

l=[ [1, 'A'], [1, 'B'], [2, 'C'] ]
d={}
for pair in l:
    if d.has_key(pair[0]):
        d[pair[0]]=d[pair[0]]+tuple(pair[1])
    else:
        d[pair[0]]=tuple(pair[1])

print d

{1: ('A', 'B'), 2: ('C',)}

이 작업을위한 좀 더 우아하고 파이썬적인 솔루션이 있습니까?


이 방법은 상대적으로 효율적이고 매우 컴팩트합니다.

reduce(lambda x, (k,v): x[k].append(v) or x, l, defaultdict(list))

파이썬 3에서는 다음과 같이된다.

dict(functools.reduce(lambda x, d: x[d[0]].append(d[1]) or x, l, collections.defaultdict(list)))

reduce가 functools로 옮겨 졌으므로 lambdas는 더 이상 튜플을 허용하지 않습니다. 이 버전은 2.6 및 2.7에서 여전히 작동합니다.


입력 목록에 이미 키가 정렬되어 있습니까? 그렇다면 기능적인 해결책이 있습니다.

import itertools

lst = [(1, 'A'), (1, 'B'), (2, 'C')]
dct = dict((key, tuple(v for (k, v) in pairs)) 
           for (key, pairs) in itertools.groupby(lst, lambda pair: pair[0]))
print dct
# {1: ('A', 'B'), 2: ('C',)}

from collections import defaultdict

d1 = defaultdict(list)

for k, v in l:
    d1[k].append(v)

d = dict((k, tuple(v)) for k, v in d1.iteritems())

d 는 지금 {1: ('A', 'B'), 2: ('C',)}

d1 은 목록을 값으로 갖는 임시 기본 명령이며 마지막 행의 튜플로 변환됩니다. 이렇게하면 목록에 추가하고 기본 루프에 튜플을 다시 만들지 않습니다.


다음은 dict comprehension을 사용하는 사전 작성의 또 다른 예입니다.

여기서 내가해야 할 일은 각 쌍이 알파벳 사전을 만드는 것입니다. 영어 알파벳 및 해당 영어 알파벳 위치

>>> import string
>>> dict1 = {value: (int(key) + 1) for key, value in 
enumerate(list(string.ascii_lowercase))}
>>> dict1
{'a': 1, 'c': 3, 'b': 2, 'e': 5, 'd': 4, 'g': 7, 'f': 6, 'i': 9, 'h': 8, 
'k': 11, 'j': 10, 'm': 13, 'l': 12, 'o': 15, 'n': 14, 'q': 17, 'p': 16, 's': 
19, 'r': 18, 'u': 21, 't': 20, 'w': 23, 'v': 22, 'y': 25, 'x': 24, 'z': 26}
>>> 

여기에 열거하여 목록에있는 알파벳과 색인의 목록을 얻고 알파벳과 색인을 교체하여 사전에 대한 키 값 쌍을 생성합니다

희망 당신에게 사전 comp의 좋은 아이디어를주고 당신이 더 자주 코드를 압축하기 위해 그것을 사용하도록 권장합니다





python list dictionary type-conversion