Si une mydict
n'est pas vide, j'accède à un élément arbitraire de la manière suivante:
mydict[mydict.keys()[0]]
Y a-t-il une meilleure façon de faire cela?
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 que cela fonctionne à la fois en Python 2 et 3, vous pouvez utiliser le paquetage six
:
six.next(six.itervalues(mydict))
mais à ce stade, il est assez cryptique et je préférerais préférer votre code.
Si vous souhaitez supprimer un élément, procédez comme suit:
key, value = mydict.popitem()
Notez que "premier" n'est pas un terme approprié ici. Il s'agit d'un élément "quelconque", car dict
n'est pas un type ordonné.
Si vous n'avez besoin d'accéder qu'à un seul élément (le premier par hasard, car les dict ne garantissent pas la commande), vous pouvez simplement le faire dans 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 2 appels successifs à l'une de ces méthodes renverront une liste avec le même ordre. Ceci n'est pas supporté avec Python3.
En python3, le chemin:
dict.keys()
retourne une valeur de type: dict_keys (), nous aurons une erreur quand nous aurons le 1er membre des clés de dict de cette façon:
dict.keys()[0]
TypeError: 'dict_keys' object does not support indexing
Enfin, je convertis dict.keys () en lister le 1er et obtient le premier membre par la méthode de splice list:
list(dict.keys())[0]
next(iter(mydict))
next(iter(mydict.values()))
next(iter(mydict.items())) # or next(iter(mydict.viewitems())) in python 2
Les deux premiers sont Python 2 et 3. Les deux derniers sont paresseux en Python 3, mais pas en Python 2.
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é, 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, vous entendez par "d'abord" le plus ancien inséré, puis dans Python 3.1, vous pouvez utiliser collections.OrderedDict , qui figure également dans le prochain Python 2.7; pour les anciennes versions de Python, téléchargez, installez et utilisez le backport dict commandé (2.4 et versions ultérieures) dans lequel vous pouvez trouver ici .
Python 3.7Maintenant dicts sont classés par ordre d'insertion.
Que dis-tu de ça. Pas encore mentionné ici.
py 2 & 3
a = {"a":2,"b":3}
a[list(a)[0]] # the first element is here
>>> 2
En ignorant les problèmes liés à l'ordre des dict, cela pourrait être mieux:
next(dict.itervalues())
De cette façon, nous évitons la recherche d’éléments et la génération d’une liste de clés que nous n’utilisons pas.
next(iter(dict.values()))
En python3
list(dict.values())[0]
Pour les deux Python 2 et 3:
import six
six.next(six.itervalues(d))
Vous pouvez toujours faire:
for k in sorted(d.keys()):
print d[k]
Cela vous donnera un ensemble de clés cohérent (en ce qui concerne intégré. Hash (), vous pouvez le traiter) si le tri a un sens 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
# lets create a simple dictionary
d = {1:1, 2:2, 3:3, 4:4, 10:10, 100:100}
print d.keys()
print sorted(d.keys())
# add some other stuff
d['peter'] = 'peter'
d['parker'] = 'parker'
print d.keys()
print sorted(d.keys())
# some more stuff, numeric of different type, this will "mess up" the keys set order
d[0.001] = 0.001
d[3.14] = 'pie'
d[2.71] = 'Apple pie'
print d.keys()
print sorted(d.keys())
Notez que le dictionnaire est trié lors de l'impression. Mais la clé est essentiellement un hashmap!
manière la plus simple pour python3:
list(dict.keys())[0]
Une mise à jour de la réponse de @ swK, basée sur le commentaire de @alldayremix:
Dans Python 3, utilisez:
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
Pas de bibliothèques externes, fonctionne à la fois sur Python 2.7 et 3.x:
>>> list(set({"a":1, "b": 2}.values()))[0]
1
Pour la clé aribtrary, laissez simplement .values ()
>>> list(set({"a":1, "b": 2}))[0]
'a'
first_key, *rest_keys = mydict
Le sous-classement dict
est une méthode, même s’il n’est pas efficace. Ici, si vous fournissez un entier, il retournera d[list(d)[n]]
, sinon accédez au dictionnaire comme prévu:
class mydict(dict):
def __getitem__(self, value):
if isinstance(value, int):
return self.get(list(self)[value])
else:
return self.get(value)
d = mydict({'a': 'hello', 'b': 'this', 'c': 'is', 'd': 'a',
'e': 'test', 'f': 'dictionary', 'g': 'testing'})
d[0] # 'hello'
d[1] # 'this'
d['c'] # 'is'