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 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
매번 목록을 다시 생성하기 때문에 그렇게 하는 것은 낭비일 뿐입니다.)
파이썬 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
'itsource' 카테고리의 다른 글
오류: Firebase 프로젝트 프로젝트 이름을 가져오지 못했습니다.프로젝트가 존재하고 계정에 액세스 권한이 있는지 확인하십시오. (0) | 2023.07.06 |
---|---|
파이썬에서 두 개의 발전기(또는 다른 반복 가능한 것)를 결합하는 방법은 무엇입니까? (0) | 2023.07.06 |
Firebase : 실시간 데이터베이스와 파일 저장소의 차이점 (0) | 2023.07.06 |
타사 앱 실행 시 LibStatusBar 아이콘이 사라짐 (0) | 2023.07.06 |
Acumia에 대한 사용자 지정 사용자 컨트롤 만들기 (0) | 2023.07.06 |