Sé que usamos enumeratepara iterar una lista, pero lo probé en un diccionario y no dio ningún error.
CÓDIGO:
enumm = {0: 1, 1: 2, 2: 3, 4: 4, 5: 5, 6: 6, 7: 7}
for i, j in enumerate(enumm):
print(i, j)
SALIDA:
0 0
1 1
2 2
3 4
4 5
5 6
6 7
¿Alguien puede explicar el resultado?
python
python-3.x
dictionary
enumerate
Aditya Krishn
fuente
fuente

for i, j in enumerate(enumm)seiincrementa en cada iteración yjcaptura el elemento habitual delenumerateargumento de la función, que en este caso es un diccionario. Iterar sobre dictados es esencialmente iterar sobre sus claves.Respuestas:
Además de las respuestas ya proporcionadas, hay un patrón muy agradable en Python que le permite enumerar tanto las claves como los valores de un diccionario.
El caso normal enumeras las claves del diccionario:
example_dict = {1:'a', 2:'b', 3:'c', 4:'d'} for i, k in enumerate(example_dict): print(i, k)Qué salidas:
0 1 1 2 2 3 3 4Pero si desea enumerar tanto las claves como los valores, esta es la forma:
for i, (k, v) in enumerate(example_dict.items()): print(i, k, v)Qué salidas:
0 1 a 1 2 b 2 3 c 3 4 dfuente
dictionary.items()(sin enumerar) para obtener un objeto de vista con pares clave-valor como una lista de tuplas.La primera columna de salida es el índice de cada elemento
enummy la segunda son sus claves. Si desea iterar su diccionario, use .items ():for k, v in enumm.items(): print(k, v)Y la salida debería verse así:
0 1 1 2 2 3 4 4 5 5 6 6 7 7fuente
Solo pensé en agregar, si desea enumerar el índice, la clave y los valores de un diccionario, su bucle for debería verse así:
for index, (key, value) in enumerate(your_dict.items()): print(index, key, value)fuente
idx, (k, v) in enumerate(d.items()):dict1={'a':1, 'b':'banana'}Para enumerar el diccionario en Python 2.x:
for k,v in dict1.iteritems(): print k,vEn Python 3.x use:
for k,v in dict1.items(): print(k,v) # a 1 # b bananaFinalmente, como otros han indicado, si desea un índice en ejecución, también puede tenerlo:
for i in enumerate(dict1.items()): print(i) # (0, ('a', 1)) # (1, ('b', 'banana'))Pero esto frustra el propósito de un diccionario (mapa, matriz asociativa) , que es una estructura de datos eficiente para búsquedas al estilo de una guía telefónica. El orden del diccionario puede ser secundario a la implementación y no se debe confiar en él. Si necesita el pedido, utilice OrderedDict en su lugar.
fuente
Dado que está utilizando, por lo
enumeratetanto, suies en realidad el índice de la clave en lugar de la clave en sí.Entonces, está ingresando
3en la primera columna de la fila3 4aunque no haya una clave3.enumerateitera a través de una estructura de datos (ya sea una lista o un diccionario) mientras que también proporciona el número de iteración actual.Por lo tanto, las columnas aquí son el número de iteración seguido de la clave en el diccionario.
enumOtras soluciones ya han mostrado cómo iterar sobre el par clave y valor, por lo que no repetiré lo mismo en el mío.
fuente
enumerate()cuando se trabaja en la lista, en realidad da el índice y el valor de los elementos dentro de la lista. Por ejemplo:l = [1, 2, 3, 4, 5, 6, 7, 8, 9] for i, j in enumerate(list): print(i, j)da
0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9donde la primera columna denota el índice del elemento y la segunda columna denota los elementos en sí.
En un diccionario
enumm = {0: 1, 1: 2, 2: 3, 4: 4, 5: 5, 6: 6, 7: 7} for i, j in enumerate(enumm): print(i, j)da la salida
0 0 1 1 2 2 3 4 4 5 5 6 6 7donde la primera columna da el índice de los
key:valuepares y la segunda columna denota elkeysdel diccionarioenumm.Entonces, si desea que la primera columna sea la
keysy la segunda columnavalues, mejor pruebedict.iteritems()(Python 2) odict.items()(Python 3)for i, j in enumm.items(): print(i, j)salida
0 1 1 2 2 3 4 4 5 5 6 6 7 7Voila
fuente
Eso seguro debe parecer confuso. Entonces esto es lo que está pasando. El primer valor de enumerate (en este caso i) devuelve el siguiente valor de índice comenzando en 0, por lo que 0, 1, 2, 3, ... Siempre devolverá estos números independientemente de lo que esté en el diccionario. El segundo valor de enumerate (en este caso j) devuelve los valores en su diccionario / enumm (lo llamamos diccionario en Python). Lo que realmente quieres hacer es con lo que respondió roadrunner66.
fuente
dict.keys()Es por eso que ve los índices de 0 a 7 en la primera columna. Son producidos por
enumeratey siempre en el orden correcto. Además, verá las claves de 0 a 7 del dictado en la segunda columna. No están ordenados.fuente
Python3:
Una solución:
enumm = {0: 1, 1: 2, 2: 3, 4: 4, 5: 5, 6: 6, 7: 7} for i, k in enumerate(enumm): print("{}) d.key={}, d.value={}".format(i, k, enumm[k]))Output: 0) enumm.key=0, enumm.value=1 1) enumm.key=1, enumm.value=2 2) enumm.key=2, enumm.value=3 3) enumm.key=4, enumm.value=4 4) enumm.key=5, enumm.value=5 5) enumm.key=6, enumm.value=6 6) enumm.key=7, enumm.value=7Otro ejemplo:
d = {1 : {'a': 1, 'b' : 2, 'c' : 3}, 2 : {'a': 10, 'b' : 20, 'c' : 30} } for i, k in enumerate(d): print("{}) key={}, value={}".format(i, k, d[k])Output: 0) key=1, value={'a': 1, 'b': 2, 'c': 3} 1) key=2, value={'a': 10, 'b': 20, 'c': 30}fuente
d = {0: 'zero', '0': 'ZERO', 1: 'one', '1': 'ONE'} print("List of enumerated d= ", list(enumerate(d.items())))salida:
List of enumerated d= [(0, (0, 'zero')), (1, ('0', 'ZERO')), (2, (1, 'one')), (3, ('1', 'ONE'))]fuente
Puede resultarle útil incluir la clave interna del índice:
d = {'a': 1, 'b': 2} d = {(i, k): v for i, (k, v) in enumerate(d.items())}Salida:
{(0, 'a'): True, (1, 'b'): False}fuente