2017-04-25 2 views
-1

내 코드에 도움이 필요합니다.파이썬 : 정수와 문자열을 키로 사용하여 중첩 목록을 사전으로 변환

F = ["M", "O", "R", "V", "C", "P"] 

내가 사전에 목록 주파수를 변환 할 :

numbers = [[4, 1, 1, 2, 3, 2], [2, 7, 3, 2, 7, 4], [1, 7, 4, 3, 3, 2]] 

나는 또한 문자열의 목록을 가지고 :

내가 이렇게 만든 중첩 된 목록을 가지고있다. 내 코드는 이것이다 :

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

문제는 내 사전의 키에 F로 목록 F의 문자열을 사용 할 것입니다 :

numb = dict(((i,f), numbers[i][f]) for i in range(len(numbers)) for f in range(len(numbers[0]))) 

다음은 결과입니다. TypeError: list indices must be integers, not str

내가 그 문제를 해결 할 수있는 방법이 있나요

numb = dict(((i,f), numbers[i][f]) for i in range(len(numbers)) for f in F) 

하지만 난 대가로 얻을 :이 같은 코드를 변경하려

{(0, "O"): 1, (1, "R"): 3, (2, "V"): 3, (0, "M"): 4, ... (0, "O"): 1} 

: 내가 갖고 싶어? 미리 감사드립니다.

+0

나는 길 잃은 괄호를 추측하고있어이 주위에 한 가지 방법은 당신이해야 모두 수정과 함께 'F'

에서 사용하는 문자의 위치를 ​​반환하는 인덱스 방법을 사용하는 것입니다. 오류 메시지를 자세히 살펴보면 구문 오류가 발견 된 곳 (실제 오류가없는 곳)에 표시됩니다. – alexis

+1

마지막 코드 조각에'''가 너무 많습니다. –

+0

@KindStranger 감사합니다. 나는 괄호를 수정했지만 이제는 또 다른 유형의 오류가 발생했습니다. – killua

답변

1

이 당신이 찾고 있던 무슨 일 수 있습니다

numb = {(i,f): numbers[i][e] for i in range(len(numbers)) for e, f in enumerate(F)} 
+0

감사합니다! 좋은 대답! – killua

+0

당신은 환영합니다 :) – zipa

1

당신은 여기에 두 가지 문제를 가지고, 첫 번째는 대체 문자열 목록 (두 개의 별도의 것들)이있을 때 너무 많은 괄호를 사용하고 있다는 것입니다, 그래서 당신의 문장의 끝이 있어야한다 :

for f in F) 

당신은 당신이 더 이상 구문 문제가하지는 것을 볼 수 있지만, 여전히 인덱스에 문제가있는 것을 볼 수 그렇게한다면 당신 때문에 문자열을 색인으로 사용하려고합니다.

numb = dict(((i,f), numbers[i][F.index(f)]) for i in range(len(numbers)) for f in F) 
+0

질문을 편집했지만 대답과 설명에 감사드립니다! – killua

관련 문제