J'essaie d'obtenir mon programme pour imprimer "banana"
à partir du dictionnaire. Quel serait le moyen le plus simple de faire cela?
Veuillez noter que je n'essaie pas d'essayer d'obtenir que mon programme affiche la valeur associée à "banana"
, mais plutôt d'afficher "banana"
avec une boucle pour. Ainsi, lorsque je l'exécute, chaque clé est également imprimé.
Ceci est mon dictionnaire:
prices = {
"banana" : 4,
"Apple" : 2,
"orange" : 1.5,
"pear" : 3
}
Si vous ne voulez qu'une clé du dictionnaire, c'est probablement le code le plus court valide pour Python 2 et 3:
my_dict = {'foo': 'bar'}
next(iter(my_dict)) # outputs 'foo'
Un dictionnaire n'est pas indexé, mais il est en quelque sorte ordonné. Ce qui suit vous donnerait la première clé existante:
list(my_dict.keys())[0]
Si vous parlez d'une constante dict
, alors la "première clé" ne veut rien dire. Les touches ne sont pas commandées de quelque manière que ce soit sur lesquelles vous pouvez compter. Si vous parcourez votre dict
, vous n'obtiendrez probablement pas "banana"
comme première chose que vous verrez.
Si vous devez garder les choses en ordre, vous devez utiliser un OrderedDict
et pas seulement un dictionnaire simple.
import collections
prices = collections.OrderedDict((
("banana", 4),
("Apple", 2),
("orange", 1.5),
("pear", 3),
))
Si vous voulez ensuite voir toutes les clés dans l’ordre vous pouvez le faire en itérant
for k in prices:
print(k)
Vous pouvez également mettre toutes les clés dans une liste, puis travailler avec celle-ci.
ks = list(prices)
print(ks[0]) # will print "banana"
Un moyen plus rapide d’obtenir l’élément first sans créer de liste consiste à appeler next
sur l’itérateur. Cela ne se généralise pas bien quand on cherche à obtenir l'élément nth
si
>>> next(iter(prices))
'banana'
Le type dict
est un non ordonné mappage, il n’existe donc pas de "premier" élément.
Ce que vous voulez, c'est probablement collections.OrderedDict
.
Pour Python 3 ci-dessous, élimine les frais généraux liés à la conversion de liste:
first = next(iter(prices.values()))
d.keys () [0] pour obtenir la clé individuelle.
Mise à jour: - @ AlejoBernardin, je ne sais pas pourquoi vous avez dit que cela ne fonctionnait pas. ici j'ai vérifié et cela a fonctionné . importer des collections
prices = collections.OrderedDict((
("banana", 4),
("Apple", 2),
("orange", 1.5),
("pear", 3),
))
prices.keys()[0]
'banane'
Comme beaucoup d'autres l'ont fait remarquer, il n'y a pas de première valeur dans un dictionnaire. Leur tri est arbitraire et vous ne pouvez pas compter sur un tri identique chaque fois que vous accédez au dictionnaire. Toutefois, si vous souhaitez imprimer les clés de différentes manières:
for key, value in prices.items():
print(key)
Cette méthode utilise l’affectation Tuple pour accéder à la clé et à la valeur. C'est pratique si vous devez accéder à la fois à la clé et à la valeur pour une raison quelconque.
for key in prices.keys():
print(key)
Cela donnera seulement accès aux clés comme le suggère la méthode keys()
.
Utilisez une boucle for qui parcourt toutes les clés dans prices
:
for key, value in prices.items():
print key
print "price: %s" %value
Assurez-vous de changer prices.items()
en prices.iteritems()
si vous utilisez Python 2.x
J'ai donc trouvé cette page en essayant d'optimiser une chose en prenant la seule clé d'un dictionnaire de longueur connue 1 et en ne renvoyant que la clé. Le processus ci-dessous est le plus rapide pour tous les dictionnaires que j'ai essayés jusqu'à la taille 700.
J'ai essayé 7 approches différentes et j'ai trouvé que celle-ci était la meilleure sur mon Macbook 2014 avec Python 3.6:
def first_5():
for key in biased_dict:
return key
Les résultats de leur profilage ont été:
2226460 / s with first_1
1905620 / s with first_2
1994654 / s with first_3
1777946 / s with first_4
3681252 / s with first_5
2829067 / s with first_6
2600622 / s with first_7
Toutes les approches que j'ai essayées sont ici:
def first_1():
return next(iter(biased_dict))
def first_2():
return list(biased_dict)[0]
def first_3():
return next(iter(biased_dict.keys()))
def first_4():
return list(biased_dict.keys())[0]
def first_5():
for key in biased_dict:
return key
def first_6():
for key in biased_dict.keys():
return key
def first_7():
for key, v in biased_dict.items():
return key