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)
파이썬 3에서는dict.keys()method는 집합 역할을 하는 사전 보기 개체를 반환합니다.사전을 직접 반복하면 키도 생성되므로 사전을 목록으로 전환하면 다음과 같은 모든 키 목록이 생성되는 키는 다음과 같습니다.
>>> test = {'foo': 'bar', 'hello': 'world'}
>>> list(test)
['foo', 'hello']
>>> list(test)[0]
'foo'
완전한 대답은 아니지만 아마도 유용한 힌트일 것입니다.만약 그것이 정말로 당신이 원하는 첫번째 아이템이라면*,
next(iter(q))
보다 훨씬 빠릅니다.
list(q)[0]
전체를 메모리에 저장할 필요가 없기 때문에 대용량 딕트의 경우.
10,000,000개의 항목에 대해 거의 40,000배 더 빠르다는 것을 알게 되었습니다.
* Python 3.6 이전에 딕트가 단지 의사 무작위 항목일 경우의 첫 번째 항목(그 이후에는 표준 구현에서 명령되지만 의존하는 것은 권장되지 않습니다.)
파이썬 3
mydict = {'a': 'one', 'b': 'two', 'c': 'three'}
mykeys = [*mydict] #list of keys
myvals = [*mydict.values()] #list of values
print(mykeys)
print(myvals)
산출량
['a', 'b', 'c']
['one', 'two', 'three']
또한 이 자세한 답변을 참조하십시오.
저는 첫 번째 사전 항목의 "키"와 "값" 쌍을 원했습니다.저는 다음 코드를 사용했습니다.
key, val = next(iter(my_dict.items()))
호출하는 대신 사전 키(첫 번째 키뿐만 아니라)를 잘라야 하는 경우list()에test를 사용하여 마크의 답변에 있는 방법을 일반화합니다.islice붙박이로itertools모듈.
from itertools import islice
# slice test.keys from index l to index u
some_keys = list(islice(test, l, u))
사전의 크기에 상대적인 슬라이스의 크기에 따라 이 방법은 다음보다 50% ->40000배 더 빠릅니다.
list(test)[l:u]
예를 들어, 아래 예제에서는 >43000배 더 빠릅니다.
n = 10_000_000
test = dict(zip(range(n), [0,1,2,3,4]*(n//5)))
%timeit list(islice(test, 10, 30))
# 4.43 µs ± 193 ns per loop (mean ± std. dev. of 7 runs, 100 loops each)
%timeit list(test)[10:30]
# 192 ms ± 2.65 ms per loop (mean ± std. dev. of 7 runs, 100 loops each)
test = {'foo': 'bar', 'hello': 'world'}
ls = []
for key in test.keys():
ls.append(key)
print(ls[0])
정적으로 정의된 목록에 키를 추가한 다음 해당 목록에 대해 색인화하는 일반적인 방법
대부분의 경우 XY 문제일 수 있습니다.사전 키를 위치별로 인덱싱하는 이유는 무엇입니까?꼭 그렇게 해야 하나요?최근까지 사전은 Python으로 주문되지도 않았기 때문에 첫 번째 요소에 액세스하는 것은 임의적이었습니다.
나는 방금 파이썬 2 코드를 파이썬 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
'programing' 카테고리의 다른 글
| 각도 2 검정:'input'의 알려진 속성이 아니므로 'ngModel'에 바인딩할 수 없습니다. (0) | 2023.05.07 |
|---|---|
| MDF 파일이란? (0) | 2023.05.07 |
| 문 인쇄를 사용하여 VARCHAR(MAX)를 인쇄하는 방법은 무엇입니까? (0) | 2023.05.07 |
| WPF에서 메서드에 바인딩하시겠습니까? (0) | 2023.05.07 |
| 프로세스가 끝날 때까지 대기 (0) | 2023.05.07 |