182 votes

Accès à l'élément dict_keys par index en Python3

J'essaie d'accéder à l'élément d'un dict_key par son index :

test = {'foo': 'bar', 'hello': 'world'}
keys = test.keys()  # dict_keys object

keys.index(0)
AttributeError: 'dict_keys' object has no attribute 'index'

Je veux obtenir foo .

même avec :

keys[0]
TypeError: 'dict_keys' object does not support indexing

Comment puis-je le faire ?

252voto

Martijn Pieters Points 271458

Appelez list() sur le dictionnaire à la place :

keys = list(test)

Dans Python 3, la fonction dict.keys() renvoie un objet de vue du dictionnaire qui agit comme un ensemble. L'itération directe sur le dictionnaire produit également des clés, de sorte que la transformation d'un dictionnaire en liste produit une liste de toutes les clés :

>>> test = {'foo': 'bar', 'hello': 'world'}
>>> list(test)
['foo', 'hello']
>>> list(test)[0]
'foo'

75voto

Mark Points 1278

Ce n'est pas une réponse complète, mais peut-être une indication utile. Si c'est vraiment le premier élément que vous voulez*, alors

next(iter(q))

est beaucoup plus rapide que

list(q)[0]

pour les grands dicts, puisque l'ensemble n'a pas besoin d'être stocké en mémoire.

Pour 10.000.000 d'articles, j'ai trouvé qu'il était presque 40.000 fois plus rapide.

*Le premier élément dans le cas d'un dict étant juste un élément pseudo-aléatoire devant Python 3.6 (après cela, il est ordonné dans l'implémentation standard, bien qu'il ne soit pas conseillé de s'y fier).

9voto

woodz Points 417

Python 3

mydict = {'a': 'one', 'b': 'two', 'c': 'three'}
mykeys = [*mydict]          #list of keys
myvals = [*mydict.values()] #list of values

print(mykeys)
print(myvals)

Sortie

['a', 'b', 'c']
['one', 'two', 'three']

Voir aussi ceci réponse détaillée

7voto

Je voulais une paire "clé" et "valeur" pour un premier élément du dictionnaire. J'ai utilisé le code suivant.

 key, val = next(iter(my_dict.items()))

0voto

pranav dua Points 41
test = {'foo': 'bar', 'hello': 'world'}
ls = []
for key in test.keys():
    ls.append(key)
print(ls[0])

Méthode conventionnelle consistant à ajouter les clés à une liste définie de manière statique, puis à l'indexer de la même manière.

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