Si a 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?
python
dictionary
Stan
la source
la source
list(mydict.keys())[0]
.Réponses:
Sur Python 3, de manière non destructive et itérative:
Sur Python 2, de manière non destructive et itérative:
Si vous voulez qu'il fonctionne à la fois en Python 2 et 3, vous pouvez utiliser le
six
package:mais à ce stade, il est assez cryptique et je préfère votre code.
Si vous souhaitez supprimer un élément, procédez comme suit:
Notez que "premier" peut ne pas être un terme approprié ici car il
dict
ne s'agit pas d'un type ordonné en Python <3.6. Python 3.6+dicts
est commandé.la source
dict.iterkeys().next()
?dict.values().__iter__().__next__()
:)key, value = dict(d).popitem()
Si vous n'avez besoin d'accéder qu'à un seul élément (étant le premier par hasard, car les dictés ne garantissent pas l'ordre), vous pouvez simplement le faire en Python 2 :
Veuillez noter que (au mieux de ma connaissance) Python ne garantit pas que 2 appels successifs à l'une de ces méthodes retourneront list avec le même ordre. Ceci n'est pas pris en charge avec Python3.
en Python 3 :
la source
list(my_dict.keys())[0]
list(my_dict.keys())[0]
n'est-ce pas paresseux?En python3, La façon:
retourne une valeur dans type: dict_keys (), nous aurons une erreur lorsque nous aurons obtenu le 1er membre des clés de dict de cette façon:
Enfin, je convertis dict.keys () en liste @ 1st, et j'ai obtenu le 1er membre par la méthode d'épissage de liste:
la source
list(dict.values())[0]
.obtenir une clé
pour obtenir une valeur
obtenir les deux
Les deux premiers sont Python 2 et 3. Les deux derniers sont paresseux en Python 3, mais pas en Python 2.
la source
Comme d'autres l'ont mentionné, il n'y a pas de "premier élément", car les dictionnaires n'ont pas d'ordre garanti (ils sont implémentés sous forme de tables de hachage). Si vous voulez, par exemple, la valeur correspondant à la plus petite clé le
thedict[min(thedict)]
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 dans Python 3.1 vous pouvez utiliser collections.OrderedDict , qui est également dans le prochain Python 2.7; pour les anciennes versions de Python, téléchargez, installez et utilisez le backport dict dicté (2.4 et versions ultérieures) que vous pouvez trouver ici .Python 3.7 Les dits sont désormais ordonnés par insertion.
la source
Que dis-tu de ça. Pas encore mentionné ici.
py 2 & 3
la source
dict.values()
renvoie une vue, donc devrait être O (1).list(a)
renvoie une nouvelle liste, serait donc O (n).Ignorant les problèmes liés à l'ordre des dicts, cela pourrait être mieux:
De cette façon, nous évitons la recherche d'éléments et générons une liste de clés que nous n'utilisons pas.
Python3
la source
next(iter(dict.values()))
obtenir le même résultat sans créer la liste.En python3
la source
Vous pouvez toujours faire:
Cela vous donnera un ensemble de clés triées de manière cohérente (par rapport au .hash () intégré, je suppose) sur lesquelles vous pouvez traiter si le tri a une signification pour vous. Cela signifie par exemple que les types numériques sont triés de manière cohérente même si vous développez le dictionnaire.
EXEMPLE
Notez que le dictionnaire est trié lors de l'impression. Mais le jeu de clés est essentiellement une table de hachage!
la source
Pour Python 2 et 3:
la source
Is there any better way to do this?
de manière brève.la source
Pas de bibliothèques externes, fonctionne à la fois sur Python 2.7 et 3.x:
Pour la clé aribtrary, il suffit de laisser de côté .values ()
la source
Le sous
dict
- classement est une méthode, mais pas efficace. Ici, si vous fournissez un entier, il reviendrad[list(d)[n]]
, sinon accédez au dictionnaire comme prévu:la source