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
. 이를 극복하기 위해 키가 처음 삽입 된 순서를 기억 하는
대신 사용할 수 있으므로
values()
메서드 가 반환하는 순서를 신뢰할 수 있습니다 .참고 URL :
'Programming' 카테고리의 다른 글
HTML / CSS를 사용하여 이미지 주위에 텍스트를 감싸는 방법 (0) | 2020.08.26 |
---|---|
@ Html.BeginForm 페이지에“System.Web.Mvc.Html.MvcForm”표시 (0) | 2020.08.26 |
indexOf와 배열의 findIndex 함수의 차이점 (0) | 2020.08.26 |
터미널에서 열린 파일의 기본 편집기를 변경 하시겠습니까? (0) | 2020.08.26 |
행 및 열 번호가 주어지면 셀의 내용을 가져옵니다. (0) | 2020.08.26 |