Si un mydict
n'est pas vide, j'accède à un élément arbitraire comme :
mydict[mydict.keys()[0]]
Y a-t-il une meilleure façon de procéder ?
Si un mydict
n'est pas vide, j'accède à un élément arbitraire comme :
mydict[mydict.keys()[0]]
Y a-t-il une meilleure façon de procéder ?
Sur Python 3, de manière non destructive et itérative :
next(iter(mydict.values()))
Sur Python 2, de manière non destructive et itérative :
mydict.itervalues().next()
Si vous voulez qu'il fonctionne à la fois dans Python 2 et 3, vous pouvez utiliser la fonction six
paquet :
six.next(six.itervalues(mydict))
bien qu'à ce stade il soit assez cryptique et je préférerais votre code.
Si vous souhaitez supprimer un élément, faites-le :
key, value = mydict.popitem()
Notez que le terme "premier" n'est peut-être pas approprié ici car dict
n'est pas un type ordonné dans Python < 3.6. Python 3.6 et plus dicts
sont commandés.
@John Machin : Eh bien, la question semble accéder à la valeur associée à la première clé, donc c'est ce que je fais également dans la réponse.
Malheureusement, le code original, qui, je l'admets, est assez joli, ne fonctionne pas avec Python 3.
Si vous n'avez besoin d'accéder qu'à un seul élément (étant le premier par hasard, puisque les dicts ne garantissent pas l'ordre), vous pouvez simplement le faire en Python 2 :
my_dict.keys()[0] -> key of "first" element
my_dict.values()[0] -> value of "first" element
my_dict.items()[0] -> (key, value) tuple of "first" element
Veuillez noter que (à ma connaissance) Python ne garantit pas que deux appels successifs à l'une de ces méthodes renverront une liste avec le même ordre. Ceci n'est pas supporté avec Python3.
en Python 3 :
list(my_dict.keys())[0] -> key of "first" element
list(my_dict.values())[0] -> value of "first" element
list(my_dict.items())[0] -> (key, value) tuple of "first" element
Cela ne fonctionne que dans Python 2.x, pour 3.x vous devez utiliser list(my_dict.keys())[0]
Alors, de quelle classe de complexité s'agit-il ? Certainement, list(my_dict.keys())[0]
n'est pas paresseux ?
Pour clarifier, ce que @alldayremix voulait dire avec ce commentaire est que dans python 3.x les résultats de my_dict.function() ne supportent pas l'indexation, c'est pourquoi nous devons d'abord le convertir en une liste et ensuite nous pouvons utiliser l'index [0].
Dans python3, la méthode :
dict.keys()
retourne une valeur de type : dict_keys(), on aura une erreur si on obtient le 1er membre des clés de dict de cette façon :
dict.keys()[0]
TypeError: 'dict_keys' object does not support indexing
Enfin, j'ai converti dict.keys() en liste @1st, et j'ai obtenu le premier membre par la méthode list splice :
list(dict.keys())[0]
Oui, mais cela ne répond pas à la question du PO, qui est de savoir comment accéder aux VALEURS, et non aux clés.
Comme d'autres l'ont mentionné, il n'y a pas de "premier élément", puisque les dictionnaires n'ont pas d'ordre garanti (ils sont implémentés comme des tables de hachage). Si vous voulez, par exemple, la valeur correspondant à la plus petite clé, thedict[min(thedict)]
le fera. Si vous vous souciez de l'ordre dans lequel les clés ont été insérées, c'est-à-dire que par "premier" vous voulez dire "inséré le plus tôt", alors en Python 3.1 vous pouvez utiliser collections.OrderedDict Pour les versions plus anciennes de Python, téléchargez, installez et utilisez le backport ordered dict (2.4 et plus) que vous trouverez à l'adresse suivante aquí .
Python 3.7 Maintenant Les dicts sont ordonnés par insertion.
Values() fera une copie de toutes les valeurs (tout comme keys() pour les clés), ce qui rendra de nombreuses opérations O(n^2).
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.
3 votes
Ce qu'il a dit ce n'est vraiment une question valable que s'il n'y a qu'un seul élément dans le dict, ou si vous ne vous souciez pas de celui que vous récupérez.
5 votes
Oui, j'ai juste besoin d'accéder à n'importe quel élément du dict, c'est pourquoi je veux accéder au premier élément.
2 votes
@Stan : mais comme Greg l'a dit, il n'y a pas de "premier" élément défini dans le dict. donc peut-être devriez-vous changer votre question, pour être clair.
10 votes
Je pense que c'est une question valable. Si vous devez accéder à un élément arbitraire, et que vous êtes sûr que le dict n'est pas vide, il peut être judicieux de demander le "premier", car le nombre d'éléments peut ne pas être connu.
0 votes
Peut-être que la question devrait également être reformulée, accéder à la première "valeur" dans dict, puisque l'exemple de code récupère effectivement la valeur. Je prendrais "élément" ici pour signifier la paire clé/valeur. Dans un cas comme dans l'autre, next(iter(dict.keys())) fournit une entrée clé, et next(iter(dict.values())) fournirait une valeur - en supposant que nous avons ici un dictionnaire avec une entrée et en utilisant Python 3
0 votes
Le code de cette question ne semble pas fonctionner dans Python 3.
d = {'foo':'bar'}
d[d.keys()[0]]
TypeError : L'objet 'dict_keys' ne supporte pas l'indexation.11 votes
@MichaelScheper Il faut faire un casting pour faire une liste :
list(mydict.keys())[0]
.