web-dev-qa-db-fra.com

Comment trouvez-vous la première clé dans un dictionnaire?

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
}
73
slagoy

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'
133
maxbellec

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]
53
ylnor

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'
12
Ryan Haining

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.

9
Hurkyl

Pour Python 3 ci-dessous, élimine les frais généraux liés à la conversion de liste:

first = next(iter(prices.values()))
5
Shital Shah

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'

2
Amit Sharma

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()

0
kylie.a

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

0
Mark M

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
0
turiyag