Pocas personas parecen, a pesar de las muchas respuestas a esta pregunta, haber señalado que los diccionarios son mapeos desordenados, por lo que (hasta la bendición del orden de inserción con Python 3.7) la idea de la "primera" entrada en un diccionario literalmente se hizo sin sentido. E incluso OrderedDictsolo se puede acceder a un índice numérico utilizando uglinesses como mydict[mydict.keys()[0]](solo Python 2, ya que en Python 3 keys()es un iterador no subscriptable).
Desde 3.7 en adelante y en la práctica también en 3.6 - el nuevo comportamiento se introdujo entonces, pero no se incluyó como parte de la especificación del lenguaje hasta 3.7 - iteración sobre las claves, valores o elementos de un dict (y, creo, un set also) producirá primero los objetos insertados menos recientemente. Todavía no existe una forma sencilla de acceder a ellos mediante el índice numérico de inserción.
En cuanto a la cuestión de seleccionar y "formatear" elementos, si conoce la clave que desea recuperar en el diccionario, normalmente usaría la clave como subíndice para recuperarla (my_var = mydict['Apple'] ).
Si realmente desea poder indexar los elementos por número de entrada (ignorando el hecho de que el número de una entrada en particular cambiará a medida que se realizan las inserciones), entonces la estructura apropiada probablemente sería una lista de tuplas de dos elementos. En vez de
mydict = {
'Apple': {'American':'16', 'Mexican':10, 'Chinese':5},
'Grapes':{'Arabian':'25','Indian':'20'} }
puedes usar:
mylist = [
('Apple', {'American':'16', 'Mexican':10, 'Chinese':5}),
('Grapes', {'Arabian': '25', 'Indian': '20'}
]
Bajo este régimen, la primera entrada está mylist[0]en la forma clásica indexada por lista, y su valor es ('Apple', {'American':'16', 'Mexican':10, 'Chinese':5}). Puede iterar sobre toda la lista de la siguiente manera:
for (key, value) in mylist: # unpacks to avoid tuple indexing
if key == 'Apple':
if 'American' in value:
print(value['American'])
pero si sabes que estás buscando la clave "Apple", ¿por qué no usarías un dict en su lugar?
Podría introducir un nivel adicional de direccionamiento indirecto almacenando en caché la lista de claves, pero la complejidad de mantener dos estructuras de datos sincronizadas inevitablemente se sumaría a la complejidad de su código.