itsource

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

mycopycode 2023. 7. 6. 22:13
반응형

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

내 코드는 다음과 같습니다.

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

이것은 python 2.7.3을 사용할 때는 완전히 정상적으로 작동하지만, python 3.2.3을 사용할 때는 다음과 같은 오류가 발생합니다.'dict_values' object does not support indexing3.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매번 목록을 다시 생성하기 때문에 그렇게 하는 것은 낭비일 뿐입니다.)

파이썬 3에서dict.values()method는 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()))

부터zip()어느 쪽이든 상관하지 않습니다.

그러나 이러한 모든 방법은 실제 내용에 따라 달라지는 결과를 제공합니다.d이 문제를 해결하기 위해 OrderDict 대신 사용할 수 있습니다. OrderDict는 키가 처음 삽입된 순서를 기억하기 때문에 다음 명령에 의해 반환되는 순서를 기대할 수 있습니다.values()방법.

Python 3.7+ 일반 사전의 업데이트는 삽입 순서를 유지하기 때문에OrderedDict더 이상 필요하지 않을 것입니다. (실제로 CPython 3.6에서도 그랬지만, 아직 공식적인 것은 아닙니다. 즉, 언어 사양의 일부가 아니라 구현 세부 사항에 불과하다는 점에서 말입니다.

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

반응형