이 질문에 대한 많은 답변에도 불구하고 사전이 순서가 지정되지 않은 매핑이라는 점을 지적한 사람은 거의 없으며 따라서 (Python 3.7의 삽입 순서가 축복 될 때까지) 문자 그대로 만들어진 사전의 "첫 번째"항목에 대한 아이디어가 말이되지 않는다. 그리고 심지어는 OrderedDict
단지 등 uglinesses 이용한 수치 색인에 의해 액세스 될 수있다 mydict[mydict.keys()[0]]
(파이썬 2 만 파이썬 3 이후 keys()
비 첨자에 반복기이다.)
3.7 이후부터 실제로 3,6에서도 새로운 동작이 도입되었지만 3.7까지 언어 사양의 일부로 포함되지 않았습니다. dict의 키, 값 또는 항목에 대한 반복 (그리고 저는 set also)는 가장 최근에 삽입 된 개체를 먼저 생성합니다. 삽입의 숫자 색인으로 액세스하는 간단한 방법은 아직 없습니다.
항목을 선택하고 "형식화"하는 질문에 대해 사전에서 검색하려는 키를 알고있는 경우 일반적으로 키를 검색하기 위해 아래 첨자로 사용합니다 (my_var = mydict['Apple']
).
항목 번호로 항목을 인덱싱 할 수 있기를 원하면 (삽입이 수행됨에 따라 특정 항목의 번호가 변경된다는 사실을 무시하고) 적절한 구조는 아마도 2 요소 튜플의 목록 일 것입니다. 대신에
mydict = {
'Apple': {'American':'16', 'Mexican':10, 'Chinese':5},
'Grapes':{'Arabian':'25','Indian':'20'} }
다음을 사용할 수 있습니다.
mylist = [
('Apple', {'American':'16', 'Mexican':10, 'Chinese':5}),
('Grapes', {'Arabian': '25', 'Indian': '20'}
]
이 체제에서 첫 번째 항목은 mylist[0]
고전적인 목록 끝 형식이며 그 값은 ('Apple', {'American':'16', 'Mexican':10, 'Chinese':5})
입니다. 다음과 같이 전체 목록을 반복 할 수 있습니다.
for (key, value) in mylist: # unpacks to avoid tuple indexing
if key == 'Apple':
if 'American' in value:
print(value['American'])
그러나 "Apple"키를 찾고 있다는 것을 알고 있다면 대신 dict를 사용하지 않는 이유는 무엇입니까?
키 목록을 캐시하여 추가적인 수준의 간접 지정을 도입 할 수 있지만 두 데이터 구조를 동기화 상태로 유지하는 복잡성은 필연적으로 코드의 복잡성을 추가합니다.