Programming

Get : TypeError : 'dict_values'객체는 파이썬 3.2.3을 사용할 때 인덱싱을 지원하지 않습니다.

procodes 2020. 8. 26. 19:39
반응형

Get : TypeError : 'dict_values'객체는 파이썬 3.2.3을 사용할 때 인덱싱을 지원하지 않습니다.


이 질문에 이미 답변이 있습니다.

이것은 내 코드입니다.

{names[i]:d.values()[i] for i in range(len(names))}

이것은 파이썬 2.7.3을 사용할 때 완전히 잘 작동합니다. 그러나 python 3.2.3을 사용할 때

'dict_values' object does not support indexing

. 3.2.3과 호환되도록 코드를 수정하려면 어떻게해야합니까?


파이썬 3에서

dict.values()

(함께

dict.keys()

하고

dict.items()

)를 반환

view

하지 않고 목록보다.

여기

에서 설명서를 참조 하십시오 . 따라서 다음과 같이

dict.values()

호출 할 때 호출을 래핑해야합니다

list

.

v = list(d.values())
{names[i]:v[i] for i in range(len(names))}

더 간단한 코드 버전은 다음과 같습니다.

dict(zip(names, d.values()))

동일한 구조를 유지하려면 다음과 같이 변경할 수 있습니다.

vlst = list(d.values())
{names[i]: vlst[i] for i in range(len(names))}

(당신은

list(d.values())

대신 이해력 안에 쉽게 넣을 수 있습니다

vlst

; 매번 목록을 다시 생성하기 때문에 그렇게하는 것은 낭비입니다).


Python 3에서

dict.values()

메서드는 Python 2 에서처럼 목록이 아닌

사전보기 객체를

반환합니다 . 사전보기는 길이가 있고 반복 할 수 있으며 멤버십 테스트를 지원하지만 인덱싱을 지원하지 않습니다.코드가 두 버전 모두에서 작동하도록하려면 다음 중 하나를 사용할 수 있습니다.

{names[i]:value for i,value in enumerate(d.values())}

    또는

values = list(d.values())
{name:values[i] for i,name in enumerate(names)}

두 버전에서 동일한 작업을 수행하는 가장 간단하고 빠른 방법은 다음과 같습니다.

dict(zip(names, d.values()))

그러나 이러한 모든 방법은의 실제 내용에 따라 달라질 수있는 결과를 제공합니다

d

. 이를 극복하기 위해 키가 처음 삽입 된 순서를 기억 하는

OrderedDict를

대신 사용할 수 있으므로

values()

메서드 가 반환하는 순서를 신뢰할 수 있습니다 .참고 URL :

https://stackoverflow.com/questions/17431638/get-typeerror-dict-values-object-does-not-support-indexing-when-using-python

반응형