Python >> Tutoriel Python >  >> Python

Python Obtenir la liste des valeurs à partir de la liste des clés

Formulation du problème

  • Étant donné un dictionnaire Python d , et
  • une liste de clés de dictionnaire.

Comment déterminer au mieux la liste des valeurs associées aux clés ?

Formellement, pour chaque key dans la liste d'entrée, vous voulez ajouter d[key] à la liste des valeurs.

Voici un exemple minimal :

# Input:
d = {'alice': 18, 'bob': 24, 'carl': 32}
keys = ['carl', 'bob']

# Output:
result = [32, 24]

Méthode 1 :Compréhension de la liste

Pour obtenir la liste des valeurs du dictionnaire à partir de la liste des clés, utilisez la déclaration de compréhension de liste [d[key] for key in keys] qui itère sur chaque clé de la liste des clés et met la valeur associée d[key] dans la liste nouvellement créée.

d = {'alice': 18, 'bob': 24, 'carl': 32}
keys = ['carl', 'bob']

result = [d[key] for key in keys]

print(result)
# [32, 24]

Cela accède à chaque valeur séparément dans un extrait de code concis d'une ligne. Si vous avez besoin d'un rappel sur la compréhension des listes, regardez cette vidéo :

Vous pouvez également lire le guide complet sur la compréhension des listes.

Cependant, vous devez savoir que si la clé est introuvable, Python lèvera une KeyError :

d = {'alice': 18, 'bob': 24, 'carl': 32}
keys = ['carl', 'bob', 'guido']

result = [d[key] for key in keys]

print(result)

La sortie de cet extrait de code est un KeyError :

...
    result = [d[key] for key in keys]
KeyError: 'guido'

Pour résoudre ce problème sans utiliser d'instruction try/except maladroite, terminez simplement l'instruction de compréhension de liste avec un mécanisme de vérification en tant que if clause :

d = {'alice': 18, 'bob': 24, 'carl': 32}
keys = ['carl', 'bob', 'guido']

result = [d[key] for key in keys if key in d]

print(result)
# [32, 24]

Méthode 2 :boucle For

Pour obtenir la liste des valeurs à partir d'une liste de clés, vous pouvez également parcourir toutes les clés dans une simple boucle for. Le corps de la boucle consiste simplement en un list.append() instruction qui remplit la liste initialement vide avec les valeurs de dictionnaire associées obtenues via d[key] .

d = {'alice': 18, 'bob': 24, 'carl': 32}
keys = ['carl', 'bob']

result = []
for key in keys:
    result.append(d[key])

print(result)
# [32, 24]

C'est la forme la plus couramment utilisée par les débutants qui ne sont pas encore familiarisés avec la compréhension des listes. Cependant, bien que ce ne soit pas la solution la plus concise, je la considérerais toujours comme Pythonic en raison de sa lisibilité et de sa simplicité.

Vous pouvez en savoir plus sur le list.append() déclaration dans la vidéo suivante :

Méthode 3 :Fonction de carte

La façon la plus concise mais la moins lisible d'obtenir la liste des valeurs à partir de la liste des clés du dictionnaire est d'utiliser l'expression list(map(d.get, keys)) qui applique d'abord le d.get(key) fonction pour chaque clé pour obtenir un itérable de valeurs associées et convertir tout en une liste en utilisant le list() intégré fonction.

d = {'alice': 18, 'bob': 24, 'carl': 32}
keys = ['carl', 'bob']

result = list(map(d.get, keys))

print(result)
# [32, 24]

Pour en savoir plus sur le map() fonction, n'hésitez pas à regarder la vidéo suivante :

Ou lisez le guide complet sur le map() fonction. Ce sera du temps bien dépensé ! 🙂