web-dev-qa-db-fra.com

énumérer () pour le dictionnaire en python

Je sais que nous utilisons enumerate pour itérer une liste, mais je l’ai essayée dans un dictionnaire et cela n’a donné aucune erreur.

CODE:

enumm = {0: 1, 1: 2, 2: 3, 4: 4, 5: 5, 6: 6, 7: 7}

for i, j in enumerate(enumm):
    print(i, j)

SORTIE:

0 0

1 1

2 2

3 4

4 5

5 6

6 7

Quelqu'un peut-il expliquer la sortie?

22
Aditya Krishn

La première colonne de sortie est l'index de chaque élément dans enumm et la seconde ses clés. Si vous voulez parcourir votre dictionnaire, utilisez .items ():

for k, v in enumm.items():
    print(k, v)

Et le résultat devrait ressembler à:

0 1
1 2
2 3
4 4 
5 5
6 6
7 7
37
user4754843
for k,v in dict.iteritems():
    print(k,v)
8
roadrunner66

En plus des réponses déjà fournies, il existe un modèle très agréable en Python qui vous permet d’énumérer les clés et les valeurs d’un dictionnaire.

Le cas normal vous énumérer les clés du dictionnaire:

example_dict = {1:'a', 2:'b', 3:'c', 4:'d'}

for i, k in enumerate(example_dict):
    print(i, k)

Quelles sorties:

0 1
1 2
2 3
3 4

Mais si vous voulez énumérer à la fois par les clés et les valeurs c'est le chemin:

for i, (k, v) in enumerate(example_dict.items()):
    print(i, k, v)

Quelles sorties:

0 1 a
1 2 b
2 3 c
3 4 d
6
João Almeida

enumerate() lorsqu’on travaille sur une liste donne l’index et la valeur des éléments de la liste . Par exemple:

l = [1, 2, 3, 4, 5, 6, 7, 8, 9]
for i, j in enumerate(list):
    print(i, j)

donne

0 1
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 9

où la première colonne indique l'index de l'élément et la deuxième colonne, les éléments eux-mêmes.

Dans un dictionnaire

enumm = {0: 1, 1: 2, 2: 3, 4: 4, 5: 5, 6: 6, 7: 7}
for i, j in enumerate(enumm):
    print(i, j)

ça donne la sortie

0 0
1 1
2 2
3 4
4 5
5 6
6 7

où la première colonne donne l'index des paires key:value et la deuxième colonne indique la keys du dictionnaire enumm.

Donc, si vous voulez que la première colonne soit la keys et que la deuxième colonne soit values, essayez plutôt dict.iteritems()(Python 2) ou dict.items() (Python 3)

for i, j in enumm.items():
    print(i, j)

sortie

0 1
1 2
2 3
4 4
5 5
6 6
7 7

Voila

2
Abhishek Roy

Cela doit paraître déroutant. C'est donc ce qui se passe. La première valeur de énumération (dans ce cas i) renvoie la valeur d'index suivante commençant à 0, donc 0, 1, 2, 3, ... Elle renverra toujours ces chiffres, quel que soit le contenu du dictionnaire. La deuxième valeur d'énumérer (dans ce cas j) renvoie les valeurs de votre dictionnaire/enumm (nous l'appelons un dictionnaire en Python). Ce que vous voulez vraiment faire, c’est avec quoi roadrunner66 a répondu.

1
Mr. Me

Puisque vous utilisez enumerate, votre i est donc l'index de la clé plutôt que la clé elle-même.

Donc, vous obtenez 3 dans la première colonne de la ligne 3 4pendant qu'il n'y ait pas de clé 3.

enumerate itère via une structure de données (liste ou dictionnaire) tout en fournissant le numéro d'itération actuel. 

Par conséquent, les colonnes ici sont le numéro d'itération suivi de la clé du dictionnaire enum

D'autres solutions ont déjà montré comment parcourir la paire clé/valeur, je ne vais donc pas répéter la même chose dans la mienne. 

1
Ankur Ranjan

Python3:

Une solution:

enumm = {0: 1, 1: 2, 2: 3, 4: 4, 5: 5, 6: 6, 7: 7}
for i, k in enumerate(enumm):
    print("{}) d.key={}, d.value={}".format(i, k, enumm[k]))

Output:
0) enumm.key=0, enumm.value=1
1) enumm.key=1, enumm.value=2
2) enumm.key=2, enumm.value=3
3) enumm.key=4, enumm.value=4
4) enumm.key=5, enumm.value=5
5) enumm.key=6, enumm.value=6
6) enumm.key=7, enumm.value=7

Un autre exemple:

d = {1 : {'a': 1, 'b' : 2, 'c' : 3},
     2 : {'a': 10, 'b' : 20, 'c' : 30}
    }    
for i, k in enumerate(d):
        print("{}) key={}, value={}".format(i, k, d[k])

Output:    
    0) key=1, value={'a': 1, 'b': 2, 'c': 3}
    1) key=2, value={'a': 10, 'b': 20, 'c': 30}
0
Kostiantyn Medvid
  1. Itérer sur un dict Python signifie itérer sur ses touches exactement de la même manière qu'avec dict.keys()
  2. L'ordre des clés est déterminé par le code d'implémentation et vous ne pouvez pas vous attendre à un ordre spécifique:

    Les clés et les valeurs sont itérées dans un ordre arbitraire qui est non aléatoire, varie selon les implémentations Python et dépend du l’historique des insertions et des suppressions dans le dictionnaire. Si clés, valeurs et Les vues des éléments sont réitérées sans modification intermédiaire du dictionnaire, l'ordre des éléments correspondra directement.

C'est pourquoi vous voyez les indices 0 à 7 dans la première colonne. Ils sont produits par enumerate et sont toujours dans le bon ordre. Plus loin, vous voyez les touches 0 à 7 du dict dans la deuxième colonne. Ils ne sont pas triés.

0
VPfB