Sujet : Re: Vérifier la présence de plusieurs clés dans un dictionnaire
De : om+news (at) *nospam* miakinen.net (Olivier Miakinen)
Groupes : fr.comp.lang.pythonDate : 26. Apr 2022, 19:01:31
Autres entêtes
Organisation : There's no cabale
Message-ID : <t498hb$21nm$1@cabale.usenet-fr.net>
References : 1 2 3
User-Agent : Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0 SeaMonkey/2.53.1
Le 26/04/2022 à 11:55, Alain Ketterlin a écrit :
>
not (keys - d.keys())
Je m'interroge sur cette façon de faire... keys est une liste, d.keys()
une "vue", je ne vois pas bien de quel opérateur - il s'agit (le
résultat est un set, en tout cas). Bref, cela fait bien ce que tu veux
apparemment.
Tu as raison de t'interroger, parce que j'ai lu trop vite la doc :
<
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.
Si le dictionnaire est volumineux et la liste courte, il vaut peut-être
mieux faire quelque chose comme
all (k in d for k in keys)
cela évitera la création explicite d'un set dans le seul but de tester
s'il est vide, et j'imagine que cela arrête la recherche au premier
False, ce que semble confirmer la doc de all.
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 !
Bon, ayant créé un set, j'en avais profité pour l'afficher dans les
traces (« les données manquantes sont... »), mais je n'en ai pas plus
besoin que ça. Merci de m'avoir répondu, je pense que je vais vraiment
retenir ta proposition. J'essaye ça dès que possible.
(Difficile d'en dire plus parce que toutes ces opérations ont une
complexité --voire un comportement -- mal documentée.)
Certes. D'où la nécessité de n'utiliser que ce qui est documenté, parce
que le reste risquerait de changer de comportement d'une version à une
autre.
-- Olivier Miakinen