Sujet : Re: Vérifier la présence de plusieurs clés dans un dictionnaire
De : alain (at) *nospam* universite-de-strasbourg.fr.invalid (Alain Ketterlin)
Groupes : fr.comp.lang.pythonDate : 26. Apr 2022, 18:37:49
Autres entêtes
Organisation : Université de Strasbourg
Message-ID : <874k2fwxsi.fsf@universite-de-strasbourg.fr.invalid>
References : 1 2 3 4
User-Agent : Gnus/5.13 (Gnus v5.13) Emacs/25.2 (gnu/linux)
Olivier Miakinen <om+
news@miakinen.net> writes:
not (keys - d.keys())
<https://docs.python.org/fr/3.8/library/stdtypes.html#frozenset.difference>
§
Remarque : Les méthodes union(), intersection(), difference(), et
symmetric_difference(), issubset(), et issuperset() acceptent n'importe
quel itérable comme argument, contrairement aux opérateurs équivalents
qui n'acceptent que des sets.
§
>
En lisant cette remarque, j'ai cru à tort qu'elle disait que « - »
acceptait n'importe quel itérable à gauche et à droite, alors qu'au
ça ne vaut pour « difference() », et encore, seulement pour son
argument !
>
Bon, il se trouve que ça marche (et que ça retourne effectivement un
set) mais je suis bien sûr preneur d'une meilleure solution.
Oui, mais je pense que ça marche grâce aux "reflected/swapped operands",
qui fait si il n'y a pas de __sub__ sur list, la méthode __rsub__ de set
(ou ce que renvoie keys()) est utilisée...
https://docs.python.org/3/reference/datamodel.html#object.__radd__all (k in d for k in keys)
Ni le dictionnaire ni la liste ne sont très gros (moins de 20 entrées
pour le dictionnaire, et entre 3 et 6 pour la liste), mais ta solution
présente surtout l'intérêt d'être plus lisible. Cette commande 'all'
est vraiment ce qu'il me faut !
Dans ce cas, "beauty is in the eye of the beholder", choisis ce que tu
comprendras le plus facilement quand tu reliras le code dans 3
semaines/mois/années/.
-- Alain.