Dictionnaire itération - pour dict vs pour dict.items ()
Quand on itère sur le dictionnaire ci-dessous, à chaque itération retourne(correctement) une clé,valeur paire
for key, value in dict.items():
print "%s key has the value %s" % (key, value)
'some key'
clé a la valeur 'some value'
(répété toutefois de nombreuses fois, il y a un k,v paire)
Ci-dessus fait sens pour moi, mais si nous le faisons:
for key in dict.items():
print "%s key has the value %s" % (key, value)
("some key", "some value")
a la valeur "some value"
(la gauche tuple va itérer sur chaque valeur de la clé de la paire et le droit de la valeur de simplement rester à la première valeur dans le dict et répétition)
Nous finissons par arriver chaque k,v paire retournée dans la première %s
(clé) et le 2ème %s
(valeur) ne sont pas parcourir, elle retourne la première valeur dans le dict pour chaque itération de la boucle for.
Je comprends que si vous itérer avec seulement for key in dict
alors vous êtes une itération sur les touches seulement. Ici, puisque nous sommes en évoluant d'un ensemble de n-uplets (en utilisant dict.items()
) uniquement avec la clé dans la boucle, la boucle doit s'exécuter pour le même nombre de fois que le premier exemple, car il y a autant de touches que la clé,des paires de valeurs.
Ce que je vais avoir du mal à saisir est pourquoi python vous donne le n-uplet entier dans le deuxième exemple pour key
.
Merci pour l'aide de tous -- je voudrais ajouter une question à l'ensemble.
for a,a in dict.items():
print a
Pourquoi le print ci-dessus la valeur, et si je print a,a
- de toute évidence, les deux valeurs sont imprimées deux fois. Si j'avais tapé for a,b
je serais itération (key,value)
paires et je voudrais donc logiquement penser que je suis maintenant une itération sur (key,key)
paires et serait donc la touche d'impression plutôt que de valeur. Désolé pour les questions de base, juste à jouer autour de l'interprète et à essayer de comprendre des choses.
source d'informationauteur Solaxun
Vous devez vous connecter pour publier un commentaire.
Le premier exemple est l'utilisation d'une chose connue comme "tuple de déballage" afin de briser ce qui est VRAIMENT le même tuple comme dans votre exemple indépendant dans le cadre de deux variables différentes.
En d'autres termes ce:
Est juste ceci:
Rappelez-vous qu'un
for
boucle est toujours itère sur les éléments individuels de l'itérateur de vous la donner.dict.items()
renvoie une liste d'objet en forme de tuples, de sorte que chaque passage à travers lafor
boucle est un nouveau tuple, automatiquement décompressés enkey, value
si vous définir en tant que tel dans lefor
boucle.Il peut aider à penser de cette façon:
N. B. que la seule raison de votre code
Ne pas jeter un
NameError
est parce quevalue
est déjà défini ailleurs dans votre code. Puisque vous ne définissez pas devalue
n'importe où dans cefor
de la boucle, il serait autrement jeter une exception.Dans le deuxième exemple que vous avez donné vous n'êtes pas l'attribution de la "valeur" de quoi que ce soit:
Avis la petite edit:
Remarque:
Dans le deuxième exemple, vous pouvez maintenant appeler dict.les touches() ou tout simplement dict (référencement d'un dictionnaire dans une boucle for sera de retour c'est les touches). L'appel de dict.les éléments() va prêter à confusion attribuer
clé=(, )
ce qui n'est probablement pas ce que vous voulez.