색인으로 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]
모든 것을 메모리에 저장할 필요가 없기 때문에 큰 dicts의 경우.
10.000.000 항목의 경우 거의 40.000 배 빠릅니다.
* dict이 파이썬 3.6 이전의 의사 난수 항목 인 경우 첫 번째 항목 은 표준 구현에서 주문되지만 의존하지 않는 것이 좋습니다.
답변
첫 번째 사전 항목의 “키”및 “값”쌍을 원했습니다. 다음 코드를 사용했습니다.
key, val = next(iter(my_dict.items()))
답변
test = {'foo': 'bar', 'hello': 'world'}
ls = []
for key in test.keys():
ls.append(key)
print(ls[0])
정적으로 정의 된 목록에 키를 추가 한 다음 동일한 색인을 생성하는 기존의 방법
답변
많은 경우에 이것은 XY 문제 일 수 있습니다 . 위치별로 사전 키를 색인화하는 이유는 무엇입니까? 정말로해야합니까? 최근까지 파이썬에서는 사전을 주문하지 않았으므로 첫 번째 요소에 액세스하는 것은 임의적이었습니다.
방금 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):
잘 작동합니다.
다른 많은 경우에는 위치별로 사전 키 인덱싱을 피할 수 있다고 생각합니다. 파이썬 3.7에서 사전이 주문되었지만 그것에 의존하는 것은 그리 좋지 않습니다. 위의 코드는의 콘텐츠 some_list
가 최근의 콘텐츠로 제작 되었기 때문에 작동합니다 d
.
disk_keys
인덱스 로 요소에 실제로 액세스해야하는 경우 코드를 자세히 살펴보십시오 . 아마도 당신은 필요하지 않습니다.
답변
이 시도
keys = [next(iter(x.keys())) for x in test]
print(list(keys))
결과는 다음과 같습니다. [ ‘foo’, ‘hello’]
더 많은 솔루션을 여기에서 찾을 수 있습니다 .