[python] 색인으로 Python 사전 요소에 액세스

다음과 같은 사전을 고려하십시오.

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 를 사용하는 것이 좋습니다
.