다음과 같은 사전을 고려하십시오.
mydict = {
'Apple': {'American':'16', 'Mexican':10, 'Chinese':5},
'Grapes':{'Arabian':'25','Indian':'20'} }
예를 들어이 사전의 특정 요소에 어떻게 액세스합니까? 예를 들어 Apple의 첫 번째 요소를 포맷 한 후 첫 번째 요소를 인쇄하고 싶습니다.
추가 정보 위의 데이터 구조는 파이썬 함수에서 입력 파일을 구문 분석하여 생성되었습니다. 그러나 일단 생성되면 해당 실행에 대해 동일하게 유지됩니다.
내 기능에서이 데이터 구조를 사용하고 있습니다.
따라서 파일이 변경되면 다음에이 응용 프로그램을 실행할 때 파일의 내용이 다르므로이 데이터 구조의 내용은 다르지만 형식은 동일합니다. 그래서 당신은 내 기능에서 내가 애플의 첫 번째 요소가 ‘American’인지 다른 것을 알지 못하기 때문에 ‘American’을 키로 직접 사용할 수 없습니다.
답변
사전이므로 키를 사용하여 액세스합니다. “Apple”에 저장된 사전을 가져 오려면 다음을 수행하십시오.
>>> mydict["Apple"]
{'American': '16', 'Mexican': 10, 'Chinese': 5}
그리고 그들 중 얼마나 많은 미국인이 (16)인지 다음과 같이하십시오.
>>> mydict["Apple"]["American"]
'16'
답변
질문이 있다면 과일로 ‘Apple’을 포함하고 사과 유형으로 ‘American’을 포함하는 사전이 있다는 것을 알고 있다면 다음을 사용합니다.
myDict = {'Apple': {'American':'16', 'Mexican':10, 'Chinese':5},
'Grapes':{'Arabian':'25','Indian':'20'} }
print myDict['Apple']['American']
다른 사람들이 제안했듯이. 대신 질문이 있다면, dict 데이터 구조의 dict에 임의의 파일을 읽을 때 ‘Apple’이 과일이고 ‘Apple’유형 인 ‘American’이 존재하는지 여부를 알 수없는 경우 다음과 같이 할 수 있습니다.
print [ftype['American'] for f,ftype in myDict.iteritems() if f == 'Apple' and 'American' in ftype]
또는 더 좋은 방법으로 Apple에만 American 유형이 있다는 것을 알고 있다면 dict의 전체 사전을 불필요하게 반복하지 않아도됩니다.
if 'Apple' in myDict:
if 'American' in myDict['Apple']:
print myDict['Apple']['American']
이 모든 경우에 사전이 실제로 항목을 저장하는 순서는 중요하지 않습니다. 주문에 대해 정말로 염려하는 경우OrderedDict
.
http://docs.python.org/dev/library/collections.html#collections.OrderedDict
답변
설명을 보았을 때 파서가 값이 다음과 같은 사전이라는 사전을 제공한다는 것을 알고 있습니다.
sampleDict = {
"key1": {"key10": "value10", "key11": "value11"},
"key2": {"key20": "value20", "key21": "value21"}
}
따라서 부모 사전을 반복해야합니다. sampleDict.values()
목록의 모든 첫 번째 사전 키를 인쇄하거나 액세스 하려면 다음과 같이 사용할 수 있습니다.
for key, value in sampleDict.items():
print value.keys()[0]
에서 첫 번째 항목의 첫 번째 키에 액세스하려는 경우 sampleDict.values()
유용 할 수 있습니다.
print sampleDict.values()[0].keys()[0]
질문에서 제시 한 예를 사용하면 다음을 의미합니다.
sampleDict = {
'Apple': {'American':'16', 'Mexican':10, 'Chinese':5},
'Grapes':{'Arabian':'25','Indian':'20'}
}
첫 번째 코드의 출력은 다음과 같습니다.
American
Indian
두 번째 코드의 출력은 다음과 같습니다.
American
답변
보너스로 귀하의 문제에 대한 다른 해결책을 제공하고 싶습니다. 특히 내부 키의 존재를 확인해야 할 때 일반적으로 지루한 중첩 사전을 다루는 것 같습니다.
pypi에 이와 관련된 흥미로운 라이브러리가 있습니다. 여기에 빠른 검색 이 있습니다.
특정 경우에는 dict_digger가 적합합니다.
>>> import dict_digger
>>> d = {
'Apple': {'American':'16', 'Mexican':10, 'Chinese':5},
'Grapes':{'Arabian':'25','Indian':'20'}
}
>>> print(dict_digger.dig(d, 'Apple','American'))
16
>>> print(dict_digger.dig(d, 'Grapes','American'))
None
답변
을 사용 dict['Apple'].keys()[0]
하여 Apple
사전 의 첫 번째 키를 가져올 수 있지만 American
. 사전의 키 순서는 사전의 내용과 키가 추가 된 순서에 따라 변경 될 수 있습니다.
답변
나는 이것이 8 살이라는 것을 알고 있지만 아무도 실제로 질문을 읽고 대답하지 않은 것 같습니다.
dict에서 .values ()를 호출하여 내부 딕셔너리 목록을 가져와 인덱스로 액세스 할 수 있습니다.
>>> mydict = {
... 'Apple': {'American':'16', 'Mexican':10, 'Chinese':5},
... 'Grapes':{'Arabian':'25','Indian':'20'} }
>>>mylist = list(mydict.values())
>>>mylist[0]
{'American':'16', 'Mexican':10, 'Chinese':5},
>>>mylist[1]
{'Arabian':'25','Indian':'20'}
>>>myInnerList1 = list(mylist[0].values())
>>>myInnerList1
['16', 10, 5]
>>>myInnerList2 = list(mylist[1].values())
>>>myInnerList2
['25', '20']
답변
사전의 순서에 의존 할 수 없습니다. 그러나 이것을 시도 할 수 있습니다.
dict['Apple'].items()[0][0]
주문을 보존하려면 http://www.python.org/dev/peps/pep-0372/#ordered-dict-api 를 사용하는 것이 좋습니다
.