42 votes

Erreur Python Dictionary.keys()

J'essaie d'utiliser le .keys() et au lieu d'obtenir une liste des clés comme ont toujours dans le passé. Cependant, je comprends ceci.

 b = { 'video':0, 'music':23 }
k = b.keys()
print( k[0] )

>>>TypeError: 'dict_keys' object does not support indexing

print( k )
dict_keys(['music', 'video'])

il devrait juste imprimer ['music', 'video'] à moins que je devienne fou.

Ce qui se passe?

91voto

larsmans Points 167484

Python 3 a modifié le comportement de dict.keys sorte qu'il renvoie maintenant un objet dict_keys , qui est itérable mais non indexable (c'est comme l'ancien dict.iterkeys , qui a disparu maintenant). Vous pouvez récupérer le résultat Python 2 avec un appel explicite à list :

 >>> b = { 'video':0, 'music':23 }
>>> k = list(b.keys())
>>> k
['music', 'video']

ou juste

 >>> list(b)
['music', 'video']

8voto

NPE Points 169956

Si vous avez attribué k comme ceci :

 k = list(b.keys())

votre code fonctionnera.

Comme l'indique l'erreur, le type dict_keys ne prend pas en charge l'indexation.

0voto

vikas0713 Points 318

Si vous voulez simplement une liste de clés d'un dictionnaire, vous pouvez directement faire comme ceci :

 b = {"name": "xyz", "class":"abc", "college": "qwert"}  
key_list = list(b)

key_list contiendra tous les noms de clés sous forme de liste, cependant, cela ne répétera pas une clé, si elle est trouvée plus d'une fois. Les clés en double seront comptées comme une seule.

-2voto

ziya efkar Points 3
import random
b = { 'video':0, 'music':23,"picture":12 }
random.choice(tuple(b.items()))

# Returns a random dictionary entry as a tuple:
# ('music', 23)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X