Por cada pitón contenedor C, la expectativa es que
for item in C:
assert item in C
pasará muy bien - ¿No te encontrarlo sorprendente si uno sentido de in
(la cláusula de bucle) tenía una completamente diferente significado del otro (el cheque de presencia)? ¡Seguro que sí! Funciona de forma natural de esa manera por listas, conjuntos, tuplas, ...
lo tanto, cuando C
es un diccionario, si in
eran para producir tuplas clave/valor en un bucle for
, entonces, por el principio de la menor sorpresa, in
también tendría que tomar una tupla como su operando de la mano izquierda en la verificación de contención.
¿Qué tan útil sería eso? De hecho bastante inútil, básicamente haciendo if (key, value) in C
sinónimo de if C.get(key) == value
- que es un cheque Creo que pude haber realizado, o quería realizar, 100 veces más raramente de lo que en realidad if k in C
significa, comprobando la presencia de la clave única e ignorando por completo el valor.
Por otro lado, con ganas de bucle sólo en claves es bastante común, por ejemplo:
for k in thedict:
thedict[k] += 1
tiene el valor así no ayudaría en particular:
for k, v in thedict.items():
thedict[k] = v + 1
en realidad un poco menos clara y menos conciso (Tenga en cuenta que items
fue la ortografía original de los métodos "adecuados" para usar para obtener pares clave/valor: desafortunadamente, eso se remonta a la época en que dichos accesadores devolvían listas enteras, así que para apoyar "simplemente iterar" tenía que introducido, y iteritems
fue - en Python 3, donde las restricciones de compatibilidad con versiones anteriores de Python se debilitaron mucho, se volvió items
de nuevo).
+1 Buena pregunta. Veamos qué tiene que decir Alex – NullUserException