100 votes

Vérifier si la liste des clés existe dans le dictionnaire

J'ai un dictionnaire qui ressemble à ça :

grades = {
        'alex' : 11,
        'bob'  : 10,
        'john' : 14,
        'peter': 7
       }

et une liste de noms students = ('alex', 'john')

Je dois vérifier que tous les noms dans students existent en tant que clés dans grades dict.

grades peut avoir plus de noms, mais tous les noms de la section students devrait être dans grades

Il doit y avoir un moyen simple de le faire, mais je suis encore novice en python et je n'arrive pas à le comprendre. essayé if students in grades ça n'a pas marché.

Dans les cas réels, les listes seront beaucoup plus importantes.

231voto

Sven Marnach Points 133943

Utilisez all() :

if all(name in grades for name in students):
    # whatever

28voto

jamylak Points 38094
>>> grades = {
        'alex' : 11,
        'bob'  : 10,
        'john' : 14,
        'peter': 7
}
>>> names = ('alex', 'john')
>>> set(names).issubset(grades)
True
>>> names = ('ben', 'tom')
>>> set(names).issubset(grades)
False

L'appeler class est invalide, je l'ai donc changé en names .

4voto

abhilekh Points 28

Supposer que les étudiants sont fixés

if not (students - grades.keys()):
    print("All keys exist")

Sinon, convertissez-le en set

if not (set(students) - grades.keys()):
    print("All keys exist")

1voto

Todd Points 176

Vous pouvez tester si un certain nombre de clés sont dans un dict en profitant du fait que <dict>.keys() renvoie un set .

Cette logique en code...

if 'foo' in d and 'bar' in d and 'baz' in d:
    do_something()

peut être représenté plus brièvement comme :

if {'foo', 'bar', 'baz'} <= d.keys():
    do_something()

Le site <= L'opérateur pour les ensembles vérifie si l'ensemble de gauche est un sous-ensemble de l'ensemble de droite. Une autre façon d'écrire ceci serait <set>.issubset(other) .

Il existe d'autres opérations intéressantes prises en charge par les ensembles : https://docs.python.org/3.8/library/stdtypes.html#set

L'utilisation de cette astuce peut condenser beaucoup d'endroits dans le code qui vérifie plusieurs clés, comme le montre le premier exemple ci-dessus.

Des listes entières de clés peuvent également être vérifiées à l'aide de la fonction <= :

if set(students) <= grades.keys():
    print("All studends listed have grades in your class.")

# or using unpacking - which is actually faster than using set()
if {*students} <= grades.keys():
    ...

Ou si students est également un dictateur :

if students.keys() <= grades.keys():
    ...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X