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 avoir foo
.
même avec:
keys[0]
TypeError: 'dict_keys' object does not support indexing
Comment puis-je faire ceci?
python
dictionary
python-3.x
key
fj123x
la source
la source
dict.keys()
renvoie un ensemble comme un objet de vue, pas une liste (donc, l'indexation n'est pas possible). Utilisationkeys = list(test)
collections.OrderedDict
si vous voulez des clés commandées)Réponses:
Appelez
list()
plutôt le dictionnaire:Dans Python 3, la
dict.keys()
méthode renvoie un objet de vue dictionnaire , qui agit comme un ensemble. Itérer directement sur le dictionnaire produit également des clés, donc transformer un dictionnaire en une liste entraîne une liste de toutes les clés:la source
dict
sous - classe, par exemple, où.keys()
est géré dans le code Python (par exemple, un changement de thread peut avoir lieu).sorted(dict)
ferait exactement la même chose; produire une liste de clés dans un ordre trié.list(dict)
vous donnera la liste dans l'ordre du dictionnaire.keys = [*test]
Pas une réponse complète mais peut-être un indice utile. Si c'est vraiment le premier article que vous voulez *, alors
est beaucoup plus rapide que
pour les grands dictats, car le tout n'a pas à être stocké en mémoire.
Pour 10 000 000 articles, je l'ai trouvé presque 40 000 fois plus rapide.
* Le premier élément dans le cas d'un dict étant juste un élément pseudo-aléatoire avant 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).
la source
Je voulais une paire «clé» et «valeur» d'un premier élément du dictionnaire. J'ai utilisé le code suivant.
la source
Méthode conventionnelle pour ajouter les clés à une liste définie statiquement, puis l'indexer pour celle-ci
la source
ls = list(test.keys())
? Je trouve cela plus simple.Dans de nombreux cas, cela peut être un problème XY . Pourquoi indexez-vous vos clés de dictionnaire par position? En avez-vous vraiment besoin? Jusqu'à récemment, les dictionnaires n'étaient même pas classés en Python, donc l'accès au premier élément était arbitraire.
Je viens de traduire du code Python 2 en Python 3:
ce qui n'est pas joli, mais pas très mal non plus. Au début, j'allais le remplacer par le monstrueux
avant de réaliser que tout cela est bien mieux écrit comme
qui fonctionne très bien.
Je pense que dans de nombreux autres cas, l'indexation des clés du dictionnaire par position peut être évitée. Bien que les dictionnaires soient ordonnés dans Python 3.7, s'en remettre à cela n'est pas joli. Le code ci-dessus ne fonctionne que parce que le contenu de
some_list
a été récemment produit à partir du contenu ded
.Jetez un œil à votre code si vous avez vraiment besoin d'accéder à un
disk_keys
élément par index. Vous n'en avez peut-être pas besoin.la source
Essaye ça
Le résultat ressemble à ceci. ['toto', 'bonjour']
Vous pouvez trouver plus de solutions possibles ici .
la source