키-값 튜플 목록을 사전으로 변환하는 방법은 무엇입니까?


125

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

[('A', 1), ('B', 2), ('C', 3)]

나는 그것을 다음과 같은 사전으로 바꾸고 싶다.

{'A': 1, 'B': 2, 'C': 3}

이것에 대해 가장 좋은 방법은 무엇입니까?

편집 : 내 튜플 목록은 실제로 다음과 같습니다.

[(A, 12937012397), (BERA, 2034927830), (CE, 2349057340)]

1
A, B(또는 BERA) 및 C(또는 CE)은 실제로 어떤 종류의 엔티티 입니까? 감사합니다
식사

아래 작업 예제에서 생성 된 오류는 그가 튜플 목록을 가지고 있지 않지만 2 개의 튜플으로 분리되기를 원하는 매우 긴 목록과 관련이 있다고 확신합니다.
gddc 2011-07-05

답변:


90

이것은 목록을 분할하고 압축하려는 것과 동일한 오류를 제공합니다. ValueError : 사전 업데이트 시퀀스 요소 # 0의 길이는 1916입니다. 2는 필수입니다.

그것이 당신의 실제 질문입니다.

대답은 목록의 요소가 자신이 생각하는 것과 다르다는 것입니다. 입력 myList[0]하면 목록의 첫 번째 요소가 예를 들어 두 개의 튜플이 ('A', 1)아니라 1916 길이의 이터 러블이라는 것을 알 수 있습니다.

원래 질문 ( ) 에서 언급 한 형식의 목록 이 실제로 있으면 .myList = [('A',1),('B',2),...]dict(myList)


감사합니다. 목록이 어떻게 그렇게되었는지는 모르겠지만 처음부터 다시 작업 한 후 수정할 수있었습니다.
Fred Wilson

1
@DJ_Stuffy_K : (컨텍스트가이 질문과 관련이 없다고 가정) 일반적으로 불필요하거나 프로그램 속도가 느려지지 않는 한 묵시적으로 구축하는 추상 데이터 구조에 유용한 인덱스로 dicts를 만드는 것은 완벽합니다. "좋은 관행"이라는 개념은 전적으로 상황에 따라 다릅니다. 키에 대한 O (1) 조회 시간이 필요합니까? 또한 임의로 "목록을 사전으로 변환"할 수 없습니다. 의미론에 전적으로 의존합니다. 예를 들어 [(1,2), (1,3)]-> {1:3}키가 손상되고 정보가 손실됩니다! dict는 O (1) 삽입 / 삭제 시간과의 일대일 관계입니다. 목록은 목록입니다.
ninjagecko

162
>>> dict([('A', 1), ('B', 2), ('C', 3)])
{'A': 1, 'C': 3, 'B': 2}

5
또한 같은 제안 다른 답변에 댓글 :이 중복 튜플 '키'예 데 적용되지 않습니다 l=[('A',1), ('B',2), ('C',3), ('A', 2)]필요가 발생합니다 'A': 1원하는 결과하지 않을 수있다.
guival

32

이거 해봤 어?

>>> l=[('A',1), ('B',2), ('C',3)]
>>> d=dict(l)
>>> d
{'A': 1, 'C': 3, 'B': 2}

ValueError : 사전 업데이트 시퀀스 요소 # 0의 길이는 1916입니다. 2가 필요합니다
Fred Wilson

그것은 내 터미널에서 바로 잘라내어 붙여 넣은 것이 었으므로 작동합니다. 그 오류를 얻기 위해 무엇을했는지 정확히 보여줄 수 있습니까?
쓸모 없음

@Fred, 뭔가 잘못 입력 했음이 틀림 없습니다.이 대답은 괜찮습니다.
martineau 2011-07-05

당신이 뭔가하려고 할 때 오류가 @FredWilson 당신은 일반적으로 얻을dict([string1, string2, string3, string4])
chacham15

2
이것은 예를 들어, 중복 된 튜플 '키'를 가진 적용되지 않습니다 l=[('A',1), ('B',2), ('C',3), ('A', 2)]필요가 발생합니다 'A': 1원하는 결과하지 않을 수있다.
guival

10

중복 된 튜플 "키"를 처리하는 방법은 다음과 같습니다.

# An example
l = [('A', 1), ('B', 2), ('C', 3), ('A', 5), ('D', 0), ('D', 9)]

# A solution
d = dict()
[d [t [0]].append(t [1]) if t [0] in list(d.keys()) 
 else d.update({t [0]: [t [1]]}) for t in l]
d

OUTPUT: {'A': [1, 5], 'B': [2], 'C': [3], 'D': [0, 9]}

대박! 나를 도와 주었다.
unpairestgood 19

그레이트!, 많은 도움
Athar

2

사전 이해를 사용하는 또 다른 방법은

>>> t = [('A', 1), ('B', 2), ('C', 3)]
>>> d = { i:j for i,j in t }
>>> d
{'A': 1, 'B': 2, 'C': 3}

2

Tuple에 키 반복이 없으면 간단합니다.

tup = [("A",0),("B",3),("C",5)]
dic = dict(tup)
print(dic)

튜플에 키 반복이있는 경우.

tup = [("A",0),("B",3),("C",5),("A",9),("B",4)]
dic = {}
for i, j in tup:
    dic.setdefault(i,[]).append(j)
print(dic)

1
l=[['A', 1], ['B', 2], ['C', 3]]
d={}
for i,j in l:
d.setdefault(i,j)
print(d)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.