Pregunta Accediendo a los elementos del diccionario python


Considera 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 formatear el primer elemento de Apple, que en nuestro caso es solo 'americano'.

Información Adicional La estructura de datos anterior se creó al analizar un archivo de entrada en una función de python. Una vez creado, sin embargo, permanece igual para esa ejecución.

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

Entonces, si el archivo cambia, la próxima vez que se ejecute esta aplicación, los contenidos del archivo serán diferentes y, por lo tanto, el contenido de esta estructura de datos será diferente, pero el formato será el mismo. Así que, como veo en mi función, no sé si el primer elemento de Apple es "estadounidense" o cualquier otra cosa así que no puedo usar directamente 'americano' como clave


75
2018-03-23 11:40


origen


Respuestas:


Dado que es un diccionario, puede acceder utilizando las teclas. Obtener el diccionario almacenado en "Apple", haga lo siguiente:

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

Y obtener cuántos de ellos son estadounidenses (16), haga esto así:

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

82
2018-03-23 11:44



Si la pregunta es, si sé que tengo un dict de dicts 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, en cambio, las preguntas son, no sabe si existen 'Apple' como fruta y 'American' como un tipo de 'Apple' cuando lee un archivo arbitrario en su estructura de datos dict de dict, podría 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 iteres innecesariamente sobre todo el dictado 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 en qué orden los diccionarios realmente almacenan las entradas. Si realmente está preocupado por el orden, entonces podría considerar usar un OrderedDict:

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


20
2018-03-23 12:18



Cuando noté su descripción, simplemente sabe que su analizador le dará un diccionario que dice que sus valores son también del siguiente estilo:

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

Entonces debes iterar sobre tu diccionario padre. Si desea imprimir o acceder a todas las primeras teclas del diccionario en sampleDict.values() lista, puede usar algo como esto:

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

Si solo quiere 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

14
2018-02-25 10:40



Como beneficio adicional, me gustaría ofrecer una especie de solución diferente a su problema. Parece que maneja diccionarios anidados, lo que suele ser tedioso, especialmente cuando tiene 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 ti.

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

8
2018-02-22 16:10



Puedes usar dict['Apple'].keys()[0] para obtener la primera clave en el Apple diccionario, pero no hay garantía de que será 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.


7
2018-03-23 11:42



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

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

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


3
2018-03-23 11:43



Ejemplo simple para comprender 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 aprenden interactivamente aquí ...


0
2018-06-12 06:24