a mydict
가 비어 있지 않으면 다음과 같이 임의의 요소에 액세스합니다.
mydict[mydict.keys()[0]]
더 좋은 방법이 있습니까?
list(mydict.keys())[0]
.
a mydict
가 비어 있지 않으면 다음과 같이 임의의 요소에 액세스합니다.
mydict[mydict.keys()[0]]
더 좋은 방법이 있습니까?
list(mydict.keys())[0]
.
답변:
파이썬 3에서는 비파괴 적으로 반복적으로 :
next(iter(mydict.values()))
파이썬 2에서는 비파괴 적으로 반복적으로 :
mydict.itervalues().next()
파이썬 2와 3에서 모두 작동하려면 six
패키지를 사용할 수 있습니다 .
six.next(six.itervalues(mydict))
이 시점에서 그것은 매우 비밀스럽고 오히려 코드를 선호합니다.
항목을 제거하려면 다음을 수행하십시오.
key, value = mydict.popitem()
"<first"는 dict
파이썬 <3.6에서 정렬 된 타입이 아니기 때문에 여기서는 적절한 용어가 아닐 수도 있습니다 . Python 3.6 이상 dicts
이 주문되었습니다.
dict.iterkeys().next()
않습니까?
dict.values().__iter__().__next__()
:)
key, value = dict(d).popitem()
하나의 요소에만 액세스 해야하는 경우 (우연히 첫 번째이므로 dicts는 순서를 보장하지 않기 때문에) Python 2 에서 간단히 수행 할 수 있습니다 .
my_dict.keys()[0] -> key of "first" element
my_dict.values()[0] -> value of "first" element
my_dict.items()[0] -> (key, value) tuple of "first" element
(내가 아는 한) 파이썬은 이러한 메소드 중 하나에 대한 두 번의 연속 호출이 동일한 순서로 목록을 반환한다고 보장하지 않습니다. Python3에서는 지원되지 않습니다.
에서 파이썬 3 :
list(my_dict.keys())[0] -> key of "first" element
list(my_dict.values())[0] -> value of "first" element
list(my_dict.items())[0] -> (key, value) tuple of "first" element
list(my_dict.keys())[0]
list(my_dict.keys())[0]
게으른하지?
python3에서 방법 :
dict.keys()
dict_keys () 유형의 값을 반환하면 다음과 같이 dict 키의 첫 번째 멤버가있을 때 오류가 발생합니다.
dict.keys()[0]
TypeError: 'dict_keys' object does not support indexing
마지막으로 dict.keys ()를 @ 1st로 변환하고 list splice 메서드로 첫 번째 멤버를 얻었습니다.
list(dict.keys())[0]
list(dict.values())[0]
.
다른 사람들이 언급했듯이 사전에는 순서가 보장되지 않기 때문에 "첫 번째 항목"이 없습니다 (해시 테이블로 구현 됨). 예를 들어 가장 작은 키에 해당하는 값을 원하면 thedict[min(thedict)]
그렇게 할 것입니다. 키가 삽입 된 순서, 즉 "첫 번째"가 "가장 빨리 삽입 됨"을 의미하는 경우 Python 3.1에서는 collections.OrderedDict 를 사용할 수 있습니다 . 이전 버전의 Python의 경우 여기에서 찾을 수있는 정렬 된 dict 백 포트 (2.4 이상)를 다운로드하여 설치하고 사용 하십시오 .
Python 3.7 이제 dicts는 삽입 순서입니다.
dict 순서와 관련된 문제를 무시하면 더 좋습니다.
next(dict.itervalues())
이런 식으로 항목 조회를 피하고 사용하지 않는 키 목록을 생성합니다.
next(iter(dict.values()))
next(iter(dict.values()))
경우 목록을 만들지 않고 동일한 결과를 가져와야합니다.
당신은 항상 할 수 있습니다 :
for k in sorted(d.keys()):
print d[k]
이렇게하면 내장 된 것과 관련하여 일관되게 정렬됩니다. 정렬에 의미가있는 경우 처리 할 수있는 키 세트가 .hash () 추측합니다). 예를 들어 사전을 확장하더라도 숫자 유형이 일관되게 정렬됩니다.
예
# lets create a simple dictionary
d = {1:1, 2:2, 3:3, 4:4, 10:10, 100:100}
print d.keys()
print sorted(d.keys())
# add some other stuff
d['peter'] = 'peter'
d['parker'] = 'parker'
print d.keys()
print sorted(d.keys())
# some more stuff, numeric of different type, this will "mess up" the keys set order
d[0.001] = 0.001
d[3.14] = 'pie'
d[2.71] = 'apple pie'
print d.keys()
print sorted(d.keys())
사전은 인쇄시 정렬됩니다. 그러나 키 세트는 본질적으로 해시 맵입니다!
파이썬 2와 3 모두
import six
six.next(six.itervalues(d))
Is there any better way to do this?
짧은 질문 으로 정확하게 대답합니다 .
first_key, *rest_keys = mydict
서브 클래 싱 dict
은 효율적이지 않지만 한 가지 방법입니다. 여기에 정수를 제공하면을 반환 d[list(d)[n]]
하고 그렇지 않으면 예상대로 사전에 액세스합니다.
class mydict(dict):
def __getitem__(self, value):
if isinstance(value, int):
return self.get(list(self)[value])
else:
return self.get(value)
d = mydict({'a': 'hello', 'b': 'this', 'c': 'is', 'd': 'a',
'e': 'test', 'f': 'dictionary', 'g': 'testing'})
d[0] # 'hello'
d[1] # 'this'
d['c'] # 'is'