Python3에서 인덱스로 dict_keys 요소에 액세스
인덱스로 dict_key의 요소에 액세스하려고합니다.
test = {'foo': 'bar', 'hello': 'world'}
keys = test.keys() # dict_keys object
keys.index(0)
AttributeError: 'dict_keys' object has no attribute 'index'
나는 얻고 싶다 foo
.
와 같다:
keys[0]
TypeError: 'dict_keys' object does not support indexing
어떻게 할 수 있습니까?
list()
대신 사전을 호출 하십시오.
keys = list(test)
Python 3에서 dict.keys()
메서드는 집합 역할을하는 사전 뷰 객체를 반환합니다 . 사전을 직접 반복하면 키도 생성되므로 사전을 목록으로 바꾸면 모든 키 목록이 생성됩니다.
>>> test = {'foo': 'bar', 'hello': 'world'}
>>> list(test)
['foo', 'hello']
>>> list(test)[0]
'foo'
완전한 대답은 아니지만 유용한 힌트 일 것입니다. 정말로 원하는 첫 번째 항목 *이라면
next(iter(q))
보다 훨씬 빠릅니다
list(q)[0]
큰 딕셔너리의 경우 모든 것이 메모리에 저장 될 필요가 없기 때문입니다.
10.000.000 항목의 경우 거의 40.000 배 더 빠릅니다.
* 딕셔너리가 파이썬 3.6 이전의 의사 난수 항목 인 경우의 첫 번째 항목 (그 이후에는 표준 구현에서 주문되지만 의존하지 않는 것이 좋습니다).
test = {'foo': 'bar', 'hello': 'world'}
ls = []
for key in test.keys():
ls.append(key)
print(ls[0])
정적으로 정의 된 목록에 키를 추가 한 다음 동일한 항목에 대해 인덱싱하는 일반적인 방법
대부분의 경우 이것은 XY 문제 일 수 있습니다 . 위치별로 사전 키를 인덱싱하는 이유는 무엇입니까? 정말 필요합니까? 최근까지 사전은 Python으로 정렬되지 않았으므로 첫 번째 요소에 액세스하는 것은 임의적이었습니다.
방금 Python 2 코드를 Python 3으로 번역했습니다.
keys = d.keys()
for (i, res) in enumerate(some_list):
k = keys[i]
# ...
예쁘지는 않지만 나쁘지는 않습니다. 처음에 나는 그것을 괴물로 대체하려고했습니다.
k = next(itertools.islice(iter(keys), i, None))
이 모든 것이 훨씬 더 잘 작성된다는 것을 깨닫기 전에
for (k, res) in zip(d.keys(), some_list):
잘 작동합니다.
다른 많은 경우에는 위치별로 사전 키를 인덱싱하는 것을 피할 수 있다고 생각합니다. 사전은 Python 3.7에서 정렬되지만 이에 의존하는 것은 예쁘지 않습니다. 위의 코드 some_list
는의 내용이의 내용에서 최근에 생성 되었기 때문에 작동합니다 d
.
disk_keys
인덱스 로 요소에 액세스해야하는 경우 코드를 자세히 살펴보십시오 . 아마도 당신은 그럴 필요가 없습니다.
참고 URL : https://stackoverflow.com/questions/18552001/accessing-dict-keys-element-by-index-in-python3
'program tip' 카테고리의 다른 글
작업 표시 줄에서 브라우저 창 깜박임 만들기 (0) | 2020.08.18 |
---|---|
setInterval () 내에서 clearInterval ()을 호출 할 수 있습니까? (0) | 2020.08.18 |
jUnit의 여러 RunWith 문 (0) | 2020.08.18 |
C ++ 코드에서 UML 생성? (0) | 2020.08.18 |
웹 서버는 몇 개의 소켓 연결을 처리 할 수 있습니까? (0) | 2020.08.18 |