유형 오류: 'dict_keys' 개체가 인덱싱을 지원하지 않습니다.
def shuffle(self, x, random=None, int=int):
"""x, random=random.random -> shuffle list x in place; return None.
Optional arg random is a 0-argument function returning a random
float in [0.0, 1.0); by default, the standard random.random.
"""
randbelow = self._randbelow
for i in reversed(range(1, len(x))):
# pick an element in x[:i+1] with which to exchange x[i]
j = randbelow(i+1) if random is None else int(random() * (i+1))
x[i], x[j] = x[j], x[i]
실행 시shuffle
기능 그것은 다음과 같은 오류를 제기합니다, 왜 그렇습니까?
TypeError: 'dict_keys' object does not support indexing
분명히 당신은 통과하고 있습니다.d.keys()
당신에게shuffle
기능.아마도 이것은 python2.x로 작성되었을 것입니다 (때d.keys()
목록을 반환했습니다.python 3.x에서는d.keys()
를 반환합니다.dict_keys
훨씬 더 많이 행동하는 물체.set
a보다list
따라서 색인화할 수 없습니다.
해결책은 통과하는 것입니다.list(d.keys())
(또는 간단히)list(d)
) ~로shuffle
.
당신은 그 결과를 통과하고 있습니다.somedict.keys()
함수에 대하여파이썬 3에서,dict.keys
목록을 반환하지 않지만 사전 키 보기를 나타내는 집합 모양 개체는 인덱싱을 지원하지 않습니다.
문제를 해결하려면 다음을 사용합니다.list(somedict.keys())
열쇠를 수집하고, 그것으로 작업합니다.
오래된 항목을 목록으로 변환하면 비용이 발생할 수 있습니다.대신 첫 번째 항목을 가져오려면 다음을 사용할 수 있습니다.
next(iter(keys))
또는 모든 항목에 대해 반복하려면 다음을 사용할 수 있습니다.
items = iter(keys)
while True:
try:
item = next(items)
except StopIteration as e:
pass # finish
Python 2에서는 dict.keys()가 목록을 반환하는 반면, Python 3에서는 생성기를 반환합니다.
값을 반복할 수만 있습니다. 그렇지 않으면 목록으로 명시적으로 변환해야 할 수 있습니다. 즉, 목록 함수로 전달해야 할 수도 있습니다.
셔플이 이미 존재하는데 왜 셔플을 구현해야 합니까?거인들의 어깨 위에 머무르세요.
import random
d1 = {0:'zero', 1:'one', 2:'two', 3:'three', 4:'four',
5:'five', 6:'six', 7:'seven', 8:'eight', 9:'nine'}
keys = list(d1)
random.shuffle(keys)
d2 = {}
for key in keys: d2[key] = d1[key]
print(d1)
print(d2)
언급URL : https://stackoverflow.com/questions/17322668/typeerror-dict-keys-object-does-not-support-indexing
'programing' 카테고리의 다른 글
Azure devops 배포 실패: 유형 오류: 정의되지 않은 속성 'scmUri'를 읽을 수 없습니다. (0) | 2023.05.18 |
---|---|
텍스트 필드를 선택할 때 UITableView 스크롤 만들기 (0) | 2023.05.18 |
sql 여러 값을 특정 순서로 정렬하시겠습니까? (0) | 2023.05.18 |
vb.net 에서 메서드 이름 뒤에 있는 달러 기호의 의미는 무엇입니까? (0) | 2023.05.18 |
Visual Studio가 "솔루션을 닫기 전에 빌드를 중지해야 합니다" 상태로 고착됨 (0) | 2023.05.18 |