Sé que usamos enumerate
para 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)
sei
incrementa en cada iteración yj
captura el elemento habitual delenumerate
argumento 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 4
Pero 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 d
fuente
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
enumm
y 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 7
fuente
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,v
En Python 3.x use:
for k,v in dict1.items(): print(k,v) # a 1 # b banana
Finalmente, 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
enumerate
tanto, sui
es en realidad el índice de la clave en lugar de la clave en sí.Entonces, está ingresando
3
en la primera columna de la fila3 4
aunque no haya una clave3
.enumerate
itera 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.
enum
Otras 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 9
donde 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 7
donde la primera columna da el índice de los
key:value
pares y la segunda columna denota elkeys
del diccionarioenumm
.Entonces, si desea que la primera columna sea la
keys
y 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 7
Voila
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
enumerate
y 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=7
Otro 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