Accediendo a los elementos del diccionario de Python por índice

Considere un dict como

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

¿Cómo accedo, por ejemplo, a un elemento particular de este diccionario? por ejemplo, me gustaría imprimir el primer elemento después de algún formateo del primer elemento de Apple, que en nuestro caso solo es ‘estadounidense’.

Información adicional La estructura de datos anterior se creó al analizar un archivo de entrada en una función python. Una vez creado, sin embargo, sigue siendo el mismo para esa ejecución.

Estoy usando esta estructura de datos en mi función.

Por lo tanto, si el archivo cambia, la próxima vez que se ejecute esta aplicación, el contenido del archivo será diferente y, por lo tanto, el contenido de esta estructura de datos será diferente, pero el formato sería el mismo. Así que ya veo en mi función, no sé que el primer elemento de Apple sea ‘estadounidense’ o cualquier otra cosa, por lo que no puedo usar directamente ‘estadounidense’ como clave.

Dado que se trata de un diccionario, se accede mediante las teclas. Consiguiendo el diccionario almacenado en “Apple”, haga lo siguiente:

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

Y consiguiendo cuántos de ellos son estadounidenses (16), haz esto:

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

Si la pregunta es, si sé que tengo un dict de dictados que contiene ‘Apple’ como fruta y ‘American’ como tipo de manzana, usaría:

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

como otros sugirieron. Si, por el contrario, la pregunta es que no sabes si ‘Apple’ como fruta y ‘American’ como tipo de ‘Apple’ existen cuando lees un archivo arbitrario en tu dictado de la estructura de datos dict, puedes hacer algo como:

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

o mejor aún, para que no se repitan innecesariamente todos los dictados de los dictados si sabes que solo Apple tiene el tipo estadounidense:

 if 'Apple' in myDict: if 'American' in myDict['Apple']: print myDict['Apple']['American'] 

En todos estos casos, no importa el orden en que los diccionarios almacenan las entradas. Si está realmente preocupado por el pedido, puede considerar usar un OrderedDict :

http://docs.python.org/dev/library/collections.html#collections.OrderedDict

Como noté su descripción, usted simplemente sabe que su analizador le dará un diccionario en el que sus valores también son como este:

 sampleDict = { "key1": {"key10": "value10", "key11": "value11"}, "key2": {"key20": "value20", "key21": "value21"} } 

Así que tienes que iterar sobre tu diccionario padre. Si desea imprimir o acceder a todas las primeras claves de diccionario en la lista sampleDict.values() , puede usar algo como esto:

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

Si solo desea acceder a la primera clave del primer elemento en sampleDict.values() , esto puede ser útil:

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

Si usa el ejemplo que dio en la pregunta, quiero decir:

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

La salida para el primer código es:

 American Indian 

Y la salida para el segundo código es:

 American 

Puedes usar dict['Apple'].keys()[0] para obtener la primera clave en el diccionario de Apple , pero no hay garantía de que sea American . El orden de las claves en un diccionario puede cambiar según el contenido del diccionario y el orden en que se agregaron las claves.

Como beneficio adicional, me gustaría ofrecer una solución diferente a su problema. Parece que estás tratando con diccionarios nesteds, lo que suele ser tedioso, especialmente cuando tienes que verificar la existencia de una clave interna.

Hay algunas bibliotecas interesantes con respecto a esto en pypi, aquí hay una búsqueda rápida para usted.

En su caso específico, dict_digger parece adecuado.

 >>> 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 

No puedes confiar en el orden de los diccionarios. Pero puedes intentar esto:

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

Si desea que se conserve el orden, puede usar esto: http://www.python.org/dev/peps/pep-0372/#ordered-dict-api

Sé que esto tiene 8 años, pero nadie parece haber leído y contestado la pregunta.

Puede llamar a .values ​​() en un dict para obtener una lista de los dicts internos y acceder a ellos por índice.

 >>> mydict = { ... 'Apple': {'American':'16', 'Mexican':10, 'Chinese':5}, ... 'Grapes':{'Arabian':'25','Indian':'20'} } >>>mylist = mydict.values() >>>mylist[0] {'American':'16', 'Mexican':10, 'Chinese':5}, >>>mylist[1] {'Arabian':'25','Indian':'20'} >>>myInnerList1 = mylist[0].values() >>>myInnerList1 ['16', 10, 5] >>>myInnerList2 = mylist[1].values() >>>myInnerList2 ['25', '20'] 

Ejemplo simple para entender cómo acceder a los elementos en el diccionario: –

Crear un diccionario

 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')) 

Explore más sobre los diccionarios de Python y aprenda de forma interactiva aquí …