Pourquoi devez-vous faire appel .iteritems() lors de l'itération sur un dictionnaire en python?
Pourquoi devez-vous appeler iteritems()
pour effectuer une itération sur la clé, des paires de valeurs dans un dictionnaire? ie
dic = {'one':'1', 'two':'2'}
for k, v in dic.iteritems():
print k, v
Pourquoi n'est-ce pas le comportement par défaut de parcourir un dictionnaire
for k, v in dic:
print k, v
- +1 Bonne question. Voyons ce qu'Alex a à dire
Vous devez vous connecter pour publier un commentaire.
Pour chaque python contenant C, l'espoir est que
va passer juste une fine -- ne serait pas vous trouver étonnant si l'un des sens de
in
(la boucle de la clause) a un sens complètement différent de l'autre (le contrôle de présence)? Je le ferais! Il s'agit naturellement de cette façon pour les listes, les ensembles, les tuples, ...Donc, quand
C
est un dictionnaire, siin
donnent clé/valeur de tuples dans unefor
boucle, puis, par le principe de moindre étonnement,in
devra également prendre un tuple comme sa gauche opérande dans l'enceinte de confinement vérifier.Comment utile que ce serait? Assez inutile, en effet, fondamentalement, faire
if (key, value) in C
synonyme deif C.get(key) == value
-- qui consiste à vérifier, je crois que j'ai peut-être effectué, ou voulu effectuer, 100 fois plus rarement que ceif k in C
fait signifie, en vérifiant la présence de la clé seulement et en ignorant totalement la valeur.Sur l'autre main, vouloir de la boucle juste sur les touches est assez fréquent, par exemple:
avoir la valeur ne serait pas utile en particulier:
en fait un peu moins clair et moins concis. (Notez que
items
était à l'origine de l'orthographe de la "bonne" méthodes à utiliser pour obtenir des paires clé/valeur: malheureusement c'était à l'époque où ces accesseurs retourné l'ensemble des listes, afin de soutenir "juste itération" une autre orthographe doit être introduit, etiteritems
c'était en Python 3, où l'arrière des contraintes de compatibilité avec les précédentes versions de Python ont été très affaibli, il est devenuitems
de nouveau).in
etfor x in
le travail des opérateurs est encore un peu de la magie pour moi.iteritems
si vite?Ma conjecture: à l'Aide de la pleine tuple serait plus intuitive pour le bouclage, mais peut-être moins le cas pour les tests d'adhésion à l'aide de
in
.Que le code ne serait pas vraiment si vous aviez à spécifier à la fois la clé et la valeur pour
in
. Je vais avoir du mal à imaginer cas d'utilisation où vous devriez vérifier si à la fois la clé ET la valeur sont dans le dictionnaire. Il est beaucoup plus naturel pour tester les touches.Maintenant, il n'est pas nécessaire que le
in
opérateur etfor ... in
fonctionner sur les mêmes éléments. La mise en œuvre de sages-elles sont différentes opérations (__contains__
vs__iter__
). Mais que peu d'incohérence serait un peu confus et incohérent.x in foo
seulement sii
dansfor i in foo
prend la valeur dex
à un certain point, je dirais que ce serait une très énorme incohérence.