programing

인덱스별 Python 사전 요소 액세스

lastcode 2023. 7. 21. 21:40
반응형

인덱스별 Python 사전 요소 액세스

다음과 같은 딕트를 생각해 보십시오.

mydict = {
  'Apple': {'American':'16', 'Mexican':10, 'Chinese':5},
  'Grapes':{'Arabian':'25','Indian':'20'} }

예를 들어 이 사전의 특정 요소에 액세스하려면 어떻게 해야 합니까?예를 들어, 저는 애플의 첫 번째 요소를 포맷한 후에 첫 번째 요소를 인쇄하고 싶습니다. 애플의 첫 번째 요소는 우리의 경우 '미국'뿐입니까?

추가 정보 위의 데이터 구조는 파이썬 함수에서 입력 파일을 구문 분석하여 생성되었습니다.그러나 생성된 후에는 해당 실행에 대해 동일하게 유지됩니다.

저는 이 데이터 구조를 제 기능에 사용하고 있습니다.

따라서 파일이 변경되면 다음 번에 이 응용 프로그램을 실행할 때 파일의 내용이 다르므로 이 데이터 구조의 내용은 다르지만 형식은 동일합니다.그래서 제 기능에서 저는 애플의 첫 번째 요소가 '미국'인지 아니면 다른 어떤 것인지 모르기 때문에 '미국'을 키로 직접 사용할 수 없습니다.

사전이므로 키를 사용하여 액세스할 수 있습니다.사전을 "Apple"에 저장하려면 다음을 수행합니다.

>>> mydict["Apple"]
{'American': '16', 'Mexican': 10, 'Chinese': 5}

그리고 그들 중 몇 명이 미국인(16명)인지 확인하려면 다음과 같이 하십시오.

>>> mydict["Apple"]["American"]
'16'

만약 제가 '애플'을 과일로, '미국'을 사과의 일종으로 포함하는 딕트를 가지고 있다는 것을 안다면, 저는 다음을 사용할 것입니다.

myDict = {'Apple': {'American':'16', 'Mexican':10, 'Chinese':5},
          'Grapes':{'Arabian':'25','Indian':'20'} }


print myDict['Apple']['American']

다른 사람들이 제시한 바와 같이만약 당신이 딕트 데이터 구조에 임의의 파일을 읽을 때 과일로서의 'Apple'과 'Apple'의 일종인 'American'이 존재하는지 모른다면, 당신은 다음과 같은 것을 할 수 있습니다.

print [ftype['American'] for f,ftype in myDict.iteritems() if f == 'Apple' and 'American' in ftype]

또는 애플만이 미국식 유형을 가지고 있다는 것을 알고 있다면 전체 딕트에 대해 불필요하게 반복하지 않도록 하는 것이 더 좋습니다.

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

편집 1:

3 . 은 메서드의 했습니다. 버전 3부터 python은 메서드의 출력 유형을 변경했습니다.keys그리고.valueslistdict_values.형유를 합니다.dict_values색인화를 허용하지 않지만 편집할 수 있습니다.따라서 위의 코드를 아래와 같이 변경해야 합니다.

첫 번째:

for key, value in sampleDict.items():
    print(list(value.keys())[0])

두 번째:

print(list(list(sampleDict.values())[0].keys())[0])

보너스로, 저는 당신의 문제에 대해 일종의 다른 해결책을 제공하고 싶습니다.중첩된 사전을 다루는 것처럼 보이는데, 특히 내부 키의 존재를 확인해야 할 때는 대개 지루합니다.

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

이 아이가 8살이라는 것은 알지만, 아무도 실제로 그 질문을 읽고 대답하지 않은 것 같습니다.

딕트에서 .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']

사용할 수 있습니다.mydict['Apple'].keys()[0] 열를얻위해에서 첫 를 얻기 .Apple사전, 하지만 그것이 될 것이라는 보장은 없습니다.American사전의 내용과 키가 추가된 순서에 따라 사전의 키 순서가 변경될 수 있습니다.

사전 순서에 의존할 수는 없지만 다음과 같이 시도할 수 있습니다.

mydict['Apple'].items()[0][0]

주문을 보존하려면 다음을 사용할 수 있습니다. http://www.python.org/dev/peps/pep-0372/ #ordered-message-api

사전의 요소에 액세스하는 방법을 이해하기 위한 간단한 예: -

사전 만들기

d = {'dog' : 'bark', 'cat' : 'meow' } 
print(d.get('cat'))
print(d.get('lion'))
print(d.get('lion', 'Not in the dictionary'))
print(d.get('lion', 'NA'))
print(d.get('dog', 'NA'))

여기에서 Python Dictionary에 대해 자세히 알아보고 대화형으로 배우십시오...

이 질문에 대한 많은 대답에도 불구하고 사전이 순서가 없는 매핑이라는 점을 지적한 사람은 거의 없는 것으로 보이며, 따라서 (Python 3.7의 삽입 순서가 축복되기 전까지는) 사전의 "첫 번째" 항목에 대한 아이디어는 문자 그대로 말이 되지 않았습니다.그리고 심지어는OrderedDict다음과 같은 추악함을 사용하여 수치 색인으로만 접근할 수 있습니다.mydict[mydict.keys()[0]] 해당, 3 )keys()반복기를 반복할 수 없습니다.)

3.7 이후부터 그리고 실제로 3.6에서도 새로운 동작이 도입되었지만 3.7까지 언어 사양의 일부로 포함되지 않았습니다. 키, 값 또는 딕트 항목에 대한 반복(그리고 세트도)이 가장 최근에 삽입된 개체를 먼저 생성할 것입니다.숫자 삽입 인덱스를 사용하여 액세스할 수 있는 간단한 방법은 아직 없습니다.

항목을 선택하고 "포맷"하는 문제와 관련하여, 사전에서 검색할 키를 알고 있는 경우 일반적으로 키를 검색하기 위한 구독자로 사용합니다.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'])

하지만 만약 당신이 "애플"이라는 열쇠를 찾고 있다는 것을 안다면, 왜 대신 딕트를 사용하지 않습니까?

키 목록을 캐시하여 간접적인 수준을 추가할 수 있지만 두 데이터 구조를 동기화 상태로 유지하는 복잡성으로 인해 코드가 복잡해질 수밖에 없습니다.

다음과 같은 작은 기능으로 나무 모양의 사전을 파고드는 것이 매우 쉬워집니다.

def dig(tree, path):
    for key in path.split("."):
        if isinstance(tree, dict) and tree.get(key):
            tree = tree[key]
        else:
            return None
    return tree

지금이다,dig(mydict, "Apple.Mexican")돌아온다10,하는 동안에dig(mydict, "Grape")하위 트리를 생성합니다.{'Arabian':'25','Indian':'20'}사전에 키가 포함되어 있지 않은 경우,dig돌아온다None.

구분 문자를 '.'에서 '/', '|' 등으로 쉽게 변경(또는 매개 변수화)할 수 있습니다.

mydict = {
'Apple': {'American':'16', 'Mexican':10, 'Chinese':5},
'Grapes':{'Arabian':'25','Indian':'20'} }

for n in mydict:
    print(mydict[n])

언급URL : https://stackoverflow.com/questions/5404665/accessing-elements-of-python-dictionary-by-index

반응형