2013-02-24 7 views
0

저는이 간단한 작업으로 막혀 있습니다. 목록 목록이 있는데 사전으로 변환해야하지만 지금까지 성공하지 못했습니다.목록의 목록을 사전으로 변환 할 때 Python KeyError가 발생했습니다.

나는 아래의 코드로했지만, 그것은 나를 KeyError를 제공합니다 : 0

list = [[3,0,7,4,5],[2,3,0,1,2],[6,6,7,6,6]] 

d = {} 
for x in list: 
    i = 0 
    for number in x: 
     d[i].append(number) 
     i += 1 

나는 그것이 이렇게 될 필요

{0: [3,2,6], 1: [0,3,6], 2: [7,0,7], 3: [4,1,6], 4: [5,2,6]} 

어떤 도움 감사합니다, 감사합니다 사전에!

+0

마십시오. 덕분에'list()'함수와 섞일 수 있습니다. – TerryA

답변

4

전달 된 키 - 값 쌍으로 초기화 새 사전 객체를 반환, 당신은 enumeratezip 기능을 사용하여 아주 간단하게이 작업을 수행 할 수 있습니다.

  • zip(*lst)

    lst = [[3, 0, 7, 4, 5], [2, 3, 0, 1, 2], [6, 6, 7, 6, 6]] 
    d = dict(enumerate(zip(*lst))) 
    

    함수 트랜스 기본적이다. Python 2에서 목록을 반환하거나, Python 3에서 zip 개체를 반환합니다.이 목록은 동등한 목록으로 변환 할 수 있습니다.

    [(3, 2, 6), (0, 3, 6), (7, 0, 7), (4, 1, 6), (5, 2, 6)] 
    
  • enumerate()은 기본적으로 그냥 전에 요소의 인덱스를 압정으로 고정하고, 목록으로 변환 할 때 튜플의 목록을 반환하는 enumerate 객체를 반환합니다.

    [(0, (3, 2, 6)), (1, (0, 3, 6)), (2, (7, 0, 7)), (3, (4, 1, 6)), (4, (5, 2, 6))] 
    
  • dict()는 튜플들의 목록을 가져와 키/값 쌍으로 만들어 버리는.배열`list` 명명

    {0: (3, 2, 6), 1: (0, 3, 6), 2: (7, 0, 7), 3: (4, 1, 6), 4: (5, 2, 6)} 
    
+0

고맙습니다. 선생님, 저를 구해 주셨습니다! – user2103666

2

ID로 내장 기능을 사용하지 마십시오.

>>> lst = [[3, 0, 7, 4, 5], [2, 3, 0, 1, 2], [6, 6, 7, 6, 6]] 

당신이 호출 처음으로 KeyError을 받고있어 : d에는 키 i가 없기 때문에

d[i].append(number) 

이입니다. 오히려이 코드를 수정하는 대신의 아마 더 "파이썬"인 enumerate()zip()를 사용하여 살펴 보자 :

>>> d = dict(enumerate(zip(*lst))) 
>>> d 
{0: (3, 2, 6), 1: (0, 3, 6), 2: (7, 0, 7), 3: (4, 1, 6), 4: (5, 2, 6)} 

는 아마도이 새로운 파이썬 사용자에 대한 약간의 발굴이다. 내가 깰 수있게 해줘.
>>> zip(*lst) 
[(3, 2, 6), (0, 3, 6), (7, 0, 7), (4, 1, 6), (5, 2, 6)] 

zip()에이 unpacks 목록

, 이는 "지퍼"함께 3 개 개의 작은 목록.

>>> enumerate(zip(*lst) 

이렇게하면 쌍의 반복자를 반환합니다. 각 쌍은 색인 (0으로 시작)과 입력 항목을 나타냅니다.

>>> dict(enumerate(zip(*lst))) 

dict() 기능은 그냥 보조 노트로.

+0

감사합니다! 너는 내 하루를 구했다! – user2103666

+0

@ user2103666 : 도와 드리겠습니다. – Johnsyweb