Deutsch   English   Français   Italiano  
<t49jeo$24dl$1@cabale.usenet-fr.net>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!news.mixmin.net!aioe.org!news.gegeweb.eu!gegeweb.org!usenet-fr.net!.POSTED!not-for-mail
From: Olivier Miakinen <om+news@miakinen.net>
Newsgroups: fr.comp.lang.python
Subject: =?UTF-8?Q?Re:_V=c3=a9rifier_la_pr=c3=a9sence_de_plusieurs_cl=c3=a9s?=
 =?UTF-8?Q?_dans_un_dictionnaire?=
Date: Tue, 26 Apr 2022 22:07:51 +0200
Organization: There's no cabale
Lines: 42
Message-ID: <t49jeo$24dl$1@cabale.usenet-fr.net>
References: <t475fb$17ub$1@cabale.usenet-fr.net>
 <t4761d$1839$1@cabale.usenet-fr.net>
 <878rrsw4mx.fsf@universite-de-strasbourg.fr.invalid>
 <t498hb$21nm$1@cabale.usenet-fr.net>
 <874k2fwxsi.fsf@universite-de-strasbourg.fr.invalid>
NNTP-Posting-Host: 220.12.205.77.rev.sfr.net
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-15
Content-Transfer-Encoding: 8bit
X-Trace: cabale.usenet-fr.net 1651003672 70069 77.205.12.220 (26 Apr 2022 20:07:52 GMT)
X-Complaints-To: abuse@usenet-fr.net
NNTP-Posting-Date: Tue, 26 Apr 2022 20:07:52 +0000 (UTC)
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101
 Firefox/52.0 SeaMonkey/2.49.4
In-Reply-To: <874k2fwxsi.fsf@universite-de-strasbourg.fr.invalid>
Bytes: 2648

Le 26/04/2022 19:37, Alain Ketterlin a écrit :
> 
> 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__

Eh bien je suis vraiment content d'avoir posé la question, parce que
j'étais loin d'imaginer tous ces mécanismes et que je trouve ça
passionnant !

Par ailleurs tu as raison, le __sub__ n'existe pas pour une liste alors que
le __rsub__ fonctionne sur un dict_keys :

% keys.__sub__(d.keys())
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'list' object has no attribute '__sub__'

% d.keys().__rsub__(keys)
set()

% d.keys()
dict_keys([ ... ])

>>> all (k in d for k in keys)
> 
>> [...] ta solution
>> présente surtout l'intérêt d'être plus lisible. [...]
> 
> 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/.

Oui, mais il faut aussi penser que ce soit quelqu'un d'autre que moi
qui puisse devoir relire le code plus tard, alors j'ajouterai aussi un
commentaire disant en substance « on vérifie que toutes les clés requises
sont dans le dictionnaire ».

-- 
Olivier Miakinen