python iterar ejercicios - Iterando sobre diccionarios usando bucles 'for'





5 Answers

No es que la clave sea una palabra especial, sino que los diccionarios implementan el protocolo iterador. Podría hacer esto en su clase, por ejemplo, vea esta pregunta para saber cómo crear iteradores de clase.

En el caso de los diccionarios, se implementa en el nivel C. Los detalles están disponibles en PEP 234 . En particular, la sección titulada "Diccionario Iteradores":

  • Los diccionarios implementan una ranura tp_iter que devuelve un iterador eficiente que recorre las claves del diccionario. [...] Esto significa que podemos escribir

    for k in dict: ...
    

    que es equivalente a, pero mucho más rápido que

    for k in dict.keys(): ...
    

    siempre que no se viole la restricción de modificaciones al diccionario (ya sea por el bucle o por otro hilo).

  • Agregue métodos a los diccionarios que devuelven explícitamente diferentes tipos de iteradores:

    for key in dict.iterkeys(): ...
    
    for value in dict.itervalues(): ...
    
    for key, value in dict.iteritems(): ...
    

    Esto significa que for x in dict es taquigrafía for x in dict.iterkeys() .

resueltos de en

Estoy un poco desconcertado por el siguiente código:

d = {'x': 1, 'y': 2, 'z': 3} 
for key in d:
    print key, 'corresponds to', d[key]

Lo que no entiendo es la parte key . ¿Cómo reconoce Python que solo necesita leer la clave del diccionario? ¿Es key una palabra especial en Python? ¿O es simplemente una variable?




key es simplemente una variable.

Para Python2.X :

d = {'x': 1, 'y': 2, 'z': 3} 
for my_var in d:
    print my_var, 'corresponds to', d[my_var]

... o mejor,

d = {'x': 1, 'y': 2, 'z': 3} 
for the_key, the_value in d.iteritems():
    print the_key, 'corresponds to', the_value

Para Python3.X :

d = {'x': 1, 'y': 2, 'z': 3} 
for the_key, the_value in d.items():
    print(the_key, 'corresponds to', the_value)



Este es un lenguaje bucle muy común. in es un operador. Para for key in dict.keys() cuándo usar la for key in dict y cuándo debe ser la for key in dict.keys() consulte el artículo Idiomatic Python de David Goodger .




Tengo un caso de uso en el que tengo que recorrer el dictado para obtener la clave, el par de valores y también el índice que indica dónde estoy. Así es como lo hago:

d = {'x': 1, 'y': 2, 'z': 3} 
for i, (key, value) in enumerate(d.items()):
   print(i, key, value)

Tenga en cuenta que los paréntesis alrededor de la clave, el valor es importante, sin los paréntesis, obtendrá un ValueError "no hay suficientes valores para descomprimir".




Puedes verificar la implementación del dicttype de CPython en GitHub. Esta es la firma del método que implementa el iterador dict:

_PyDict_Next(PyObject *op, Py_ssize_t *ppos, PyObject **pkey,
             PyObject **pvalue, Py_hash_t *phash)

CPython dictobject.c




Related