Para cada contenedor Python C, la expectativa es que
for item in C:
assert item in C
pasará bien, ¿no le parecería sorprendente si una sensación dein (la cláusula loop) tuviera un significado completamente diferente del otro (la verificación de presencia)? ¡Seguro que lo haría! Naturalmente funciona de esa manera para listas, conjuntos, tuplas, ...
Entonces, cuando se Ctrata de un diccionario, si se inprodujeran tuplas clave / valor en un forbucle, entonces, por el principio de menor asombro, intambién tendría que tomar una tupla como su operando de la izquierda en la verificación de contención.
¿Qué tan útil sería eso? De hecho, es bastante inútil, básicamente haciendo if (key, value) in Cun sinónimo de if C.get(key) == value, que es un control que creo que podría haber realizado, o quería realizar, 100 veces más raramente de lo que if k in Crealmente significa , verificando la presencia de la clave solamente e ignorando por completo el valor.
Por otro lado, querer hacer un bucle solo en las teclas es bastante común, por ejemplo:
for k in thedict:
thedict[k] += 1
tener el valor también no ayudaría particularmente:
for k, v in thedict.items():
thedict[k] = v + 1
en realidad algo menos claro y menos conciso. (Tenga en cuenta que esa itemsera la ortografía original de los métodos "adecuados" para usar para obtener pares clave / valor: desafortunadamente eso fue en los días en que tales accesores devolvieron listas completas, por lo que para admitir "simplemente iterar" se tuvo que introducir una ortografía alternativa , y iteritems lo fue: en Python 3, donde las restricciones de compatibilidad con versiones anteriores de Python se debilitaron mucho, se volvió de itemsnuevo).
x in foosolo siien algún momentofor i in fooasume el valor dex, diría que sería una gran inconsistencia.