Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > fr.comp.lang.python > #3531 > unrolled thread

Extraire d'un dictionnaire un sous-dictionnaire

Started byOlivier Miakinen <om+news@miakinen.net>
First post2021-05-25 00:13 +0200
Last post2021-05-31 00:40 +0200
Articles 20 on this page of 22 — 5 participants

Back to article view | Back to fr.comp.lang.python


Contents

  Extraire d'un dictionnaire un sous-dictionnaire Olivier Miakinen <om+news@miakinen.net> - 2021-05-25 00:13 +0200
    Re: Extraire d'un dictionnaire un sous-dictionnaire Julien Palard <julien@palard.fr> - 2021-05-25 08:07 +0200
      Re: Extraire d'un dictionnaire un sous-dictionnaire Olivier Miakinen <om+news@miakinen.net> - 2021-05-25 10:07 +0200
        Re: Extraire d'un dictionnaire un sous-dictionnaire Olivier Miakinen <om+news@miakinen.net> - 2021-05-25 11:56 +0200
          Re: Extraire d'un dictionnaire un sous-dictionnaire Nicolas <nicolasp@aaton.com> - 2021-05-25 12:04 +0200
            Re: Extraire d'un dictionnaire un sous-dictionnaire Olivier Miakinen <om+news@miakinen.net> - 2021-05-25 17:24 +0200
    Re: Extraire d'un dictionnaire un sous-dictionnaire Nicolas <nicolasp@aaton.com> - 2021-05-25 10:55 +0200
      Re: Extraire d'un dictionnaire un sous-dictionnaire Nicolas <nicolasp@aaton.com> - 2021-05-25 10:58 +0200
        Re: Extraire d'un dictionnaire un sous-dictionnaire Olivier Miakinen <om+news@miakinen.net> - 2021-05-25 11:50 +0200
          Re: Extraire d'un dictionnaire un sous-dictionnaire Nicolas <nicolasp@aaton.com> - 2021-05-25 11:58 +0200
            Re: Extraire d'un dictionnaire un sous-dictionnaire Olivier Miakinen <om+news@miakinen.net> - 2021-05-25 17:20 +0200
    Re: Extraire d'un dictionnaire un sous-dictionnaire Alain Ketterlin <alain@universite-de-strasbourg.fr.invalid> - 2021-05-25 14:10 +0200
      Re: Extraire d'un dictionnaire un sous-dictionnaire Olivier Miakinen <om+news@miakinen.net> - 2021-05-25 17:28 +0200
        Re: Extraire d'un dictionnaire un sous-dictionnaire Nicolas <nicolasp@aaton.com> - 2021-05-26 14:21 +0200
          Re: Extraire d'un dictionnaire un sous-dictionnaire Olivier Miakinen <om+news@miakinen.net> - 2021-05-26 17:57 +0200
            Re: Extraire d'un dictionnaire un sous-dictionnaire Nicolas <nicolasp@aaton.com> - 2021-05-31 08:48 +0200
              Re: Extraire d'un dictionnaire un sous-dictionnaire Olivier Miakinen <om+news@miakinen.net> - 2021-05-31 09:14 +0200
                Re: Extraire d'un dictionnaire un sous-dictionnaire Nicolas <nicolasp@aaton.com> - 2021-06-01 09:10 +0200
    Re: Extraire d'un dictionnaire un sous-dictionnaire rejoc <rejoc@FREEfree.fr> - 2021-05-28 21:45 +0200
      Re: Extraire d'un dictionnaire un sous-dictionnaire rejoc <rejoc@FREEfree.fr> - 2021-05-28 21:52 +0200
        Re: Extraire d'un dictionnaire un sous-dictionnaire Olivier Miakinen <om+news@miakinen.net> - 2021-05-29 11:07 +0200
          Re: [DIGRESSION] Extraire d'un dictionnaire un sous-dictionnaire rejoc <rejoc@FREEfree.fr> - 2021-05-31 00:40 +0200

Page 1 of 2  [1] 2  Next page →


#3531 — Extraire d'un dictionnaire un sous-dictionnaire

FromOlivier Miakinen <om+news@miakinen.net>
Date2021-05-25 00:13 +0200
SubjectExtraire d'un dictionnaire un sous-dictionnaire
Message-ID<s8h8e5$1ieq$1@cabale.usenet-fr.net>
Bonjour,

Je cherche à résoudre élégamment un problème. Comme souvent j'ai déjà
une idée de la solution, d'où ma question consistant à extraire un
sous-dictionnaire d'un dictionnaire. Mais dans un second temps je vais
exposer le vrai problème au cas où mon idée ne serait pas optimale.

=====

Voici donc ma question. Supposons que j'ai un dictionnaire, par exemple
mondict = { "t" : "TRUC", "m" : "MACHIN", "b" : "BIDULE", "c" : "CHOSE" }.

J'ai par ailleurs une liste de clés, keys = ["b", "c", "t", "z"], ou un tuple
keys = ("b", "c", "t", "z"), ou un set keys = {"b", "c", "t", "z"}, selon ce
qui sera le plus simple.

Je voudrais, à partir de keys (qu'il soit liste, tuple ou set) et de mon
dictionnaire, obtenir un dictionnaire ne contenant que les entrées présentes
dans keys, dans mon exemple "b", "c" et "t", pas l'entrée "m", sans que cela
ne provoque une erreur à cause de "z".

Donc :
resultat = { "t" : "TRUC", "b" : "BIDULE", "c" : "CHOSE" }

=====

Et maintenant le vrai problème.

Je voudrais appeler une fonction du type :
 def lafonction(b=None, c=None, t=None, z=None):
    ....
en lui passant les valeurs pour b, c, t et z, si elles existent, se trouvant
dans mon dictionnaire mondict. Du coup un truc du genre :
 lafonction(**mondict)
mais sans que cela provoque une erreur à cause de l'entrée "m".


Cordialement,
-- 
Olivier Miakinen

[toc] | [next] | [standalone]


#3532

FromJulien Palard <julien@palard.fr>
Date2021-05-25 08:07 +0200
Message-ID<60ac9428$0$12715$426a74cc@news.free.fr>
In reply to#3531
Le 5/25/21 à 12:13 AM, Olivier Miakinen a écrit :> Comme souvent j'ai 
déjà> une idée de la solution, d'où ma question consistant à extraire 
un> sous-dictionnaire d'un dictionnaire.
C'est l'occasion de dégainer un dictionnaire en compréhension :

     {key: value for key, value in mondict.items() if key in keys}

> Et maintenant le vrai problème.
> 
> Je voudrais appeler une fonction du type :
>   def lafonction(b=None, c=None, t=None, z=None):
>      ....
> en lui passant les valeurs pour b, c, t et z, si elles existent, se trouvant
> dans mon dictionnaire mondict. Du coup un truc du genre :
>   lafonction(**mondict)
> mais sans que cela provoque une erreur à cause de l'entrée "m".

« Explicit is better » me tente de te proposer simplement :

     lafonction(mondict.get("b"), mondict.get("c"), mondict.get("t"), 
mondict.get("z"))

qui prend du sens aussi dès qu'une des valeur par défaut n'est plus None 
mais 0, ou dès qu'un paramètre n'est plus optionnel, ...

Bonne journée,
-- 
[Julien Palard](https://mdk.fr)

[toc] | [prev] | [next] | [standalone]


#3533

FromOlivier Miakinen <om+news@miakinen.net>
Date2021-05-25 10:07 +0200
Message-ID<s8ib8v$20hg$1@cabale.usenet-fr.net>
In reply to#3532
Bonjour,

Le 25/05/2021 08:07, Julien Palard m'a répondu :
> Le 5/25/21 à 12:13 AM, Olivier Miakinen a écrit :> Comme souvent j'ai 
> déjà> une idée de la solution, d'où ma question consistant à extraire 
> un> sous-dictionnaire d'un dictionnaire.
> C'est l'occasion de dégainer un dictionnaire en compréhension :
> 
>      {key: value for key, value in mondict.items() if key in keys}

Tout simplement ! J'avais cru essayer ça mais j'ai dû me planter dans la syntaxe
car ça n'avait pas fonctionné. Cela dit je ne me rappelle pas exactement ce que
j'avais tenté.

Déjà merci pour cette solution.

>> Et maintenant le vrai problème.
>> 
>> Je voudrais appeler une fonction du type :
>>   def lafonction(b=None, c=None, t=None, z=None):
>>      ....
>> en lui passant les valeurs pour b, c, t et z, si elles existent, se trouvant
>> dans mon dictionnaire mondict. Du coup un truc du genre :
>>   lafonction(**mondict)
>> mais sans que cela provoque une erreur à cause de l'entrée "m".
> 
> « Explicit is better » me tente de te proposer simplement :
> 
>      lafonction(mondict.get("b"), mondict.get("c"), mondict.get("t"), 
> mondict.get("z"))
> 
> qui prend du sens aussi dès qu'une des valeur par défaut n'est plus None 
> mais 0, ou dès qu'un paramètre n'est plus optionnel, ...

Sauf que, justement, lorsqu'une valeur par défaut n'est plus None ou qu'un
paramètre est optionnel ça force la valeur None et ça je ne le veux pas.

D'ailleurs je n'avais pas donné un exemple de fonction représentatif mais ce
qui m'intéresse ce sont les classes nntplib.NNTP et nntplib.NNTP_SSL :

<https://docs.python.org/3.8/library/nntplib.html>
class nntplib.NNTP(host, port=119, user=None, password=None, readermode=None,
usenetrc=False[, timeout])
</>

-- 
Olivier Miakinen

[toc] | [prev] | [next] | [standalone]


#3537

FromOlivier Miakinen <om+news@miakinen.net>
Date2021-05-25 11:56 +0200
Message-ID<s8ihkh$24pq$1@cabale.usenet-fr.net>
In reply to#3533
Le 25/05/2021 10:07, je répondais à Julien Palard :
>> 
>>      {key: value for key, value in mondict.items() if key in keys}
> 
> Tout simplement ! J'avais cru essayer ça mais j'ai dû me planter dans la syntaxe
> car ça n'avait pas fonctionné. Cela dit je ne me rappelle pas exactement ce que
> j'avais tenté.


Ça y est, je me rappelle mon erreur, j'avais écrit « and » au lieu de « if ».

{key: value for key, value in mondict.items() and key in keys}
 =>
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'key' is not defined

Eh oui, je ne suis encore que débutant en Python, je n'ai pas les bons réflexes.

-- 
Olivier Miakinen

[toc] | [prev] | [next] | [standalone]


#3539

FromNicolas <nicolasp@aaton.com>
Date2021-05-25 12:04 +0200
Message-ID<60accbbc$0$6206$426a74cc@news.free.fr>
In reply to#3537
Le 25/05/2021 à 11:56, Olivier Miakinen a écrit :
> Le 25/05/2021 10:07, je répondais à Julien Palard :
>>>
>>>       {key: value for key, value in mondict.items() if key in keys}
>>
>> Tout simplement ! J'avais cru essayer ça mais j'ai dû me planter dans la syntaxe
>> car ça n'avait pas fonctionné. Cela dit je ne me rappelle pas exactement ce que
>> j'avais tenté.
> 
> 
> Ça y est, je me rappelle mon erreur, j'avais écrit « and » au lieu de « if ».
> 
> {key: value for key, value in mondict.items() and key in keys}
>   =>
> Traceback (most recent call last):
>    File "<stdin>", line 1, in <module>
> NameError: name 'key' is not defined
> 
> Eh oui, je ne suis encore que débutant en Python, je n'ai pas les bons réflexes.
> 

Le dictionnaire en compréhension est moins lisible mais plus concis que 
les solutions "éclatées" que j'ai proposées (je sais, certains ne seront 
pas d'accord). Et c'est probablement plus rapide aussi.

[toc] | [prev] | [next] | [standalone]


#3542

FromOlivier Miakinen <om+news@miakinen.net>
Date2021-05-25 17:24 +0200
Message-ID<s8j4rj$2gh7$1@cabale.usenet-fr.net>
In reply to#3539
Le 25/05/2021 12:04, Nicolas a écrit :
> 
> Le dictionnaire en compréhension est moins lisible mais plus concis que 
> les solutions "éclatées" que j'ai proposées (je sais, certains ne seront 
> pas d'accord).

Je suis d'accord sur le fait que certains ne seront pas d'accord. ;-)
(et je fais partie de ceux-là)

> Et c'est probablement plus rapide aussi.

C'est assez probable. Mais cela dit je me fiche de gagner des poignées de
millisecondes, parce que le traitement que je fais ensuite dure quelques
dizaines de secondes.

-- 
Olivier Miakinen

[toc] | [prev] | [next] | [standalone]


#3534

FromNicolas <nicolasp@aaton.com>
Date2021-05-25 10:55 +0200
Message-ID<60acbb69$0$32501$426a74cc@news.free.fr>
In reply to#3531
Bonjour,

Quelque chose comme ceci ? :

mondict = {"t" : "TRUC", "m" : "MACHIN", "b" : "BIDULE", "c" : "CHOSE"}
keys = ["b", "c", "t", "z"]

new_dict = {}
for k in keys :
     try :
         new_dict[k] = mondict[k]
     except KeyError :
         pass

print (new_dict)


C'est basique mais ça fait le job.

Nicolas

[toc] | [prev] | [next] | [standalone]


#3535

FromNicolas <nicolasp@aaton.com>
Date2021-05-25 10:58 +0200
Message-ID<60acbc42$0$21610$426a74cc@news.free.fr>
In reply to#3534
Autre version sans try/except :

mondict = {"t" : "TRUC", "m" : "MACHIN", "b" : "BIDULE", "c" : "CHOSE"}
keys = ["b", "c", "t", "z"]

new_dict = {}
for k in keys :
     if k in mondict :
         new_dict[k] = mondict[k]

print (new_dict)


Si des problèmes de performance se posent, une des deux solutions 
peut-être meilleure que l'autre.

Nicolas

[toc] | [prev] | [next] | [standalone]


#3536

FromOlivier Miakinen <om+news@miakinen.net>
Date2021-05-25 11:50 +0200
Message-ID<s8ih94$24l0$1@cabale.usenet-fr.net>
In reply to#3535
Le 25/05/2021 10:58, Nicolas m'a répondu :
> Autre version sans try/except :
> 
> [...]
> 
> Si des problèmes de performance se posent, une des deux solutions 
> peut-être meilleure que l'autre.

Merci, mais la solution directe donnée par Julien me semble encore
meilleure, non seulement en concision et en lisibilité, mais
probablement aussi en performance (quoique ça ne fasse sans doute
aucune différence dans mon cas).

-- 
Olivier Miakinen

[toc] | [prev] | [next] | [standalone]


#3538

FromNicolas <nicolasp@aaton.com>
Date2021-05-25 11:58 +0200
Message-ID<60acca2f$0$6453$426a74cc@news.free.fr>
In reply to#3536
Le 25/05/2021 à 11:50, Olivier Miakinen a écrit :
> Le 25/05/2021 10:58, Nicolas m'a répondu :
>> Autre version sans try/except :
>>
>> [...]
>>
>> Si des problèmes de performance se posent, une des deux solutions
>> peut-être meilleure que l'autre.
> 
> Merci, mais la solution directe donnée par Julien me semble encore
> meilleure, non seulement en concision et en lisibilité, mais
> probablement aussi en performance (quoique ça ne fasse sans doute
> aucune différence dans mon cas).
> 
Pas de soucis.

Dans la réponse à Julien :
"Sauf que, justement, lorsqu'une valeur par défaut n'est plus None ou qu'un
paramètre est optionnel ça force la valeur None et ça je ne le veux pas."

J'ai ai déduit que la solution ne convenait pas.
Mais j'ai mal compris ;)


Nicolas

[toc] | [prev] | [next] | [standalone]


#3541

FromOlivier Miakinen <om+news@miakinen.net>
Date2021-05-25 17:20 +0200
Message-ID<s8j4je$2gfv$1@cabale.usenet-fr.net>
In reply to#3538
Bonjour,

Le 25/05/2021 11:58, Nicolas m'a répondu:
>> 
>> [...] la solution directe donnée par Julien me semble encore
>> meilleure, non seulement en concision et en lisibilité, mais
>> probablement aussi en performance (quoique ça ne fasse sans doute
>> aucune différence dans mon cas).
>> 
> Pas de soucis.
> 
> Dans la réponse à Julien :
> "Sauf que, justement, lorsqu'une valeur par défaut n'est plus None ou qu'un
> paramètre est optionnel ça force la valeur None et ça je ne le veux pas."

Ça c'est ce que j'ai répondu à sa deuxième proposition, celle qui justement
ne créait pas un autre dictionnaire à partir du premier.

-- 
Olivier Miakinen

[toc] | [prev] | [next] | [standalone]


#3540

FromAlain Ketterlin <alain@universite-de-strasbourg.fr.invalid>
Date2021-05-25 14:10 +0200
Message-ID<87fsyb9fqd.fsf@universite-de-strasbourg.fr.invalid>
In reply to#3531
Olivier Miakinen <om+news@miakinen.net> writes:

> Je cherche à résoudre élégamment un problème. Comme souvent j'ai déjà
> une idée de la solution, d'où ma question consistant à extraire un
> sous-dictionnaire d'un dictionnaire.

Je pense que la solution de Julien est imbattable.

> Et maintenant le vrai problème.
>
> Je voudrais appeler une fonction du type :
>  def lafonction(b=None, c=None, t=None, z=None):
>     ....
> en lui passant les valeurs pour b, c, t et z, si elles existent, se trouvant
> dans mon dictionnaire mondict. Du coup un truc du genre :
>  lafonction(**mondict)
> mais sans que cela provoque une erreur à cause de l'entrée "m".

Tu peux aussi ajouter un argument à la fonction pour collecter les
déchets :

  def lafonction(b=None, c=None, t=None, z=None, **trash):
      ....

Pas besoin de toucher à ton dictionnaire dans ce cas.

-- Alain.

[toc] | [prev] | [next] | [standalone]


#3543

FromOlivier Miakinen <om+news@miakinen.net>
Date2021-05-25 17:28 +0200
Message-ID<s8j537$2gi3$1@cabale.usenet-fr.net>
In reply to#3540
Bonjour,

Le 25/05/2021 14:10, Alain Ketterlin m'a répondu :
> 
>> Je cherche à résoudre élégamment un problème. Comme souvent j'ai déjà
>> une idée de la solution, d'où ma question consistant à extraire un
>> sous-dictionnaire d'un dictionnaire.
> 
> Je pense que la solution de Julien est imbattable.

En effet.

>> Et maintenant le vrai problème.
>>
>> Je voudrais appeler une fonction du type :
>>  def lafonction(b=None, c=None, t=None, z=None):
>>     ....
>> en lui passant les valeurs pour b, c, t et z, si elles existent, se trouvant
>> dans mon dictionnaire mondict. Du coup un truc du genre :
>>  lafonction(**mondict)
>> mais sans que cela provoque une erreur à cause de l'entrée "m".
> 
> Tu peux aussi ajouter un argument à la fonction pour collecter les
> déchets :
> 
>   def lafonction(b=None, c=None, t=None, z=None, **trash):
>       ....
> 
> Pas besoin de toucher à ton dictionnaire dans ce cas.

C'est vrai, et je garde l'idée pour plus tard si le problème se pose avec
des fonctions que j'aurais écrites moi-même. Mais ici en l'occurrence ce
n'est pas le cas : ce sont des fonctions faisant partie d'une bibliothèque
standard de Python.

Cordialement,
-- 
Olivier Miakinen

[toc] | [prev] | [next] | [standalone]


#3544

FromNicolas <nicolasp@aaton.com>
Date2021-05-26 14:21 +0200
Message-ID<60ae3d3d$0$6455$426a34cc@news.free.fr>
In reply to#3543
Le 25/05/2021 à 17:28, Olivier Miakinen a écrit :
> Bonjour,
> 
> Le 25/05/2021 14:10, Alain Ketterlin m'a répondu :
>>
>>> Je cherche à résoudre élégamment un problème. Comme souvent j'ai déjà
>>> une idée de la solution, d'où ma question consistant à extraire un
>>> sous-dictionnaire d'un dictionnaire.
>>
>> Je pense que la solution de Julien est imbattable.
> 
> En effet.
> 
Il y a deux versions possibles.

Celle de Julien qui itère sur le dictionnaire d'origine :
{key: value for key, value in mondict.items() if key in keys}

et une autre qui itère sur les clés :
{key: mondict[key] for key in keys if key in mon dict}

De façon générale, en fonction de la taille du dictionnaire et de la 
taille de la liste de clés, une version peut être plus intéressante que 
l'autre. Toujours dans le but de gagner en performance.
Même si ce n'est pas nécessaire ici, tu peux voir les choses autrement : 
Le temps CPU non utilisé, c'est de l'énergie économisée.

Nicolas

[toc] | [prev] | [next] | [standalone]


#3545

FromOlivier Miakinen <om+news@miakinen.net>
Date2021-05-26 17:57 +0200
Message-ID<s8lr5t$mpq$1@cabale.usenet-fr.net>
In reply to#3544
Le 26/05/2021 14:21, Nicolas a écrit :
> 
> Il y a deux versions possibles.
> 
> Celle de Julien qui itère sur le dictionnaire d'origine :
> {key: value for key, value in mondict.items() if key in keys}
> 
> et une autre qui itère sur les clés :
> {key: mondict[key] for key in keys if key in mondict}

Les deux sont intéressantes, parce que cela a une incidence sur l'ordre
des clés dans le résultat.

mondict = { "t" : "TRUC", "m" : "MACHIN", "b" : "BIDULE", "c" : "CHOSE" }
keys = ["b", "c", "t", "z"]

{key: value for key, value in mondict.items() if key in keys}
 => {'t': 'TRUC', 'b': 'BIDULE', 'c': 'CHOSE'}

{key: mondict[key] for key in keys if key in mondict}
 => {'b': 'BIDULE', 'c': 'CHOSE', 't': 'TRUC'}

On a bien sûr la même chose si keys est un tuple au lieu d'une liste, mais
l'ordre n'est pas prédictible si c'est un set.

> De façon générale, en fonction de la taille du dictionnaire et de la 
> taille de la liste de clés, une version peut être plus intéressante que 
> l'autre. Toujours dans le but de gagner en performance.

Dans mon cas, le dictionnaire contiendra généralement trois ou quatre
valeurs, et la liste de clés en contient tout juste cinq : "host",
"port", "user", "password" et "usenetrc". Après avoir fait ce filtrage
une seule fois pour passer les paramètres à nntplib.NNTP ou à
nntplib.NNTP_SSL, j'utilise le résultat de la connexion pour lire la
totalité de usenet-fr, ce qui me prend en moyenne 45 secondes.

> Même si ce n'est pas nécessaire ici, tu peux voir les choses autrement : 
> Le temps CPU non utilisé, c'est de l'énergie économisée.

Certes. Du coup je pourrais faire une boucle testant un million de fois
chacune des méthodes afin de savoir au finale laquelle est la plus rapide.
Mais avant de rentabiliser l'énergie perdue par mon test il va me falloir
quelques années d'utilisation du programme dûment optimisé. ;-)

-- 
Olivier Miakinen

[toc] | [prev] | [next] | [standalone]


#3555

FromNicolas <nicolasp@aaton.com>
Date2021-05-31 08:48 +0200
Message-ID<60b486c4$0$3266$426a34cc@news.free.fr>
In reply to#3545
> 
>> Même si ce n'est pas nécessaire ici, tu peux voir les choses autrement :
>> Le temps CPU non utilisé, c'est de l'énergie économisée.
> 
> Certes. Du coup je pourrais faire une boucle testant un million de fois
> chacune des méthodes afin de savoir au finale laquelle est la plus rapide.
> Mais avant de rentabiliser l'énergie perdue par mon test il va me falloir
> quelques années d'utilisation du programme dûment optimisé. ;-)
> 

Mais peut-être qu'un jour ton code se retrouvera dans une librairie 
téléchargée des millions de fois et exécutée sur tous les 
PC/téléphones/tablettes/systèmes embarqués du monde ;)

[toc] | [prev] | [next] | [standalone]


#3556

FromOlivier Miakinen <om+news@miakinen.net>
Date2021-05-31 09:14 +0200
Message-ID<s922bs$jf0$1@cabale.usenet-fr.net>
In reply to#3555
Le 31/05/2021 08:48, Nicolas a écrit :
>> 
>>> Même si ce n'est pas nécessaire ici, tu peux voir les choses autrement :
>>> Le temps CPU non utilisé, c'est de l'énergie économisée.
>> 
>> Certes. Du coup je pourrais faire une boucle testant un million de fois
>> chacune des méthodes afin de savoir au finale laquelle est la plus rapide.
>> Mais avant de rentabiliser l'énergie perdue par mon test il va me falloir
>> quelques années d'utilisation du programme dûment optimisé. ;-)
> 
> Mais peut-être qu'un jour ton code se retrouvera dans une librairie 
> téléchargée des millions de fois et exécutée sur tous les 
> PC/téléphones/tablettes/systèmes embarqués du monde ;)

Il se trouve que non. Tu ne savais pas à quoi mon programme est censé servir,
mais c'est typiquement le genre de programme que je me dois de ne pas partager.

<http://www.usenet-fr.net/fur/usenet/abus/cancel-faq-fr-1.html>
<cit. IV. E.>
Donner  un  robot-annulateur,  c'est  comme  donner  une  arme chargée, sans
sécurité.  Même si celui à qui on le donne est bien intentionné, les erreurs
sont  fatales.  Vous  avez  besoin d'une formation correcte auparavant. Bien
sûr,  il y a des gens qui vous donneront l'arme sans l'entraînement, mais on
peut se poser des questions sur leur motivation...

En  général, peu de gens accepteront de vous donner leur code avant que vous
ne  sachiez  parfaitement  vous  servir  d'un robot-annulateur. Ceux-ci sont
dangereux  et  peuvent  être  utilisés  à  mauvais escient. De plus, si vous
commettez  une  bourde  avec  un  robot-annulateur,  vous causerez de graves
problèmes,  et  on  peut  commettre  assez  facilement  une  bourde  avec un
robot-annulateur.  Pour  toutes  ces  raisons, on considère généralement que
seuls  ceux qui arrivent à écrire leur propre robot-annulateur sont capables
d'en posséder un.
</cit.>

-- 
Olivier Miakinen

[toc] | [prev] | [next] | [standalone]


#3561

FromNicolas <nicolasp@aaton.com>
Date2021-06-01 09:10 +0200
Message-ID<60b5dd66$0$12695$426a34cc@news.free.fr>
In reply to#3556
Le 31/05/2021 à 09:14, Olivier Miakinen a écrit :
> Le 31/05/2021 08:48, Nicolas a écrit :
>>>
>>>> Même si ce n'est pas nécessaire ici, tu peux voir les choses autrement :
>>>> Le temps CPU non utilisé, c'est de l'énergie économisée.
>>>
>>> Certes. Du coup je pourrais faire une boucle testant un million de fois
>>> chacune des méthodes afin de savoir au finale laquelle est la plus rapide.
>>> Mais avant de rentabiliser l'énergie perdue par mon test il va me falloir
>>> quelques années d'utilisation du programme dûment optimisé. ;-)
>>
>> Mais peut-être qu'un jour ton code se retrouvera dans une librairie
>> téléchargée des millions de fois et exécutée sur tous les
>> PC/téléphones/tablettes/systèmes embarqués du monde ;)
> 
> Il se trouve que non. Tu ne savais pas à quoi mon programme est censé servir,
> mais c'est typiquement le genre de programme que je me dois de ne pas partager.
>En fait, c'était une boutade ;)

 > ...

[toc] | [prev] | [next] | [standalone]


#3546

Fromrejoc <rejoc@FREEfree.fr>
Date2021-05-28 21:45 +0200
Message-ID<s8rh8e$702o$1@pasdenom.info>
In reply to#3531
Ca fait pas le job ??

new_dict = dict((k, v) for k, v in mondict.items() if k in keys)


Le 25/05/2021 00:13, Olivier Miakinen a écrit :
> Bonjour,
>
> Je cherche à résoudre élégamment un problème. Comme souvent j'ai déjà
> une idée de la solution, d'où ma question consistant à extraire un
> sous-dictionnaire d'un dictionnaire. Mais dans un second temps je vais
> exposer le vrai problème au cas où mon idée ne serait pas optimale.
>
> =====
>
> Voici donc ma question. Supposons que j'ai un dictionnaire, par exemple
> mondict = { "t" : "TRUC", "m" : "MACHIN", "b" : "BIDULE", "c" : "CHOSE" }.
>
> J'ai par ailleurs une liste de clés, keys = ["b", "c", "t", "z"], ou un tuple
> keys = ("b", "c", "t", "z"), ou un set keys = {"b", "c", "t", "z"}, selon ce
> qui sera le plus simple.
>
> Je voudrais, à partir de keys (qu'il soit liste, tuple ou set) et de mon
> dictionnaire, obtenir un dictionnaire ne contenant que les entrées présentes
> dans keys, dans mon exemple "b", "c" et "t", pas l'entrée "m", sans que cela
> ne provoque une erreur à cause de "z".
>
> Donc :
> resultat = { "t" : "TRUC", "b" : "BIDULE", "c" : "CHOSE" }
>
> =====
>
> Et maintenant le vrai problème.
>
> Je voudrais appeler une fonction du type :
>   def lafonction(b=None, c=None, t=None, z=None):
>      ....
> en lui passant les valeurs pour b, c, t et z, si elles existent, se trouvant
> dans mon dictionnaire mondict. Du coup un truc du genre :
>   lafonction(**mondict)
> mais sans que cela provoque une erreur à cause de l'entrée "m".
>
>
> Cordialement,

[toc] | [prev] | [next] | [standalone]


#3547

Fromrejoc <rejoc@FREEfree.fr>
Date2021-05-28 21:52 +0200
Message-ID<s8rhld$70cn$1@pasdenom.info>
In reply to#3546
Désolé, j'arrive un peu tard...

Après, pour la fonction, tu peux extraire les clefs en récupérant la 
signature et construire ton "keys" dynamiquement...

Le 28/05/2021 21:45, rejoc a écrit :
> Ca fait pas le job ??
>
> new_dict = dict((k, v) for k, v in mondict.items() if k in keys)
>
>
> Le 25/05/2021 00:13, Olivier Miakinen a écrit :
>> Bonjour,
>>
>> Je cherche à résoudre élégamment un problème. Comme souvent j'ai déjà
>> une idée de la solution, d'où ma question consistant à extraire un
>> sous-dictionnaire d'un dictionnaire. Mais dans un second temps je vais
>> exposer le vrai problème au cas où mon idée ne serait pas optimale.
>>
>> =====
>>
>> Voici donc ma question. Supposons que j'ai un dictionnaire, par exemple
>> mondict = { "t" : "TRUC", "m" : "MACHIN", "b" : "BIDULE", "c" :
>> "CHOSE" }.
>>
>> J'ai par ailleurs une liste de clés, keys = ["b", "c", "t", "z"], ou
>> un tuple
>> keys = ("b", "c", "t", "z"), ou un set keys = {"b", "c", "t", "z"},
>> selon ce
>> qui sera le plus simple.
>>
>> Je voudrais, à partir de keys (qu'il soit liste, tuple ou set) et de mon
>> dictionnaire, obtenir un dictionnaire ne contenant que les entrées
>> présentes
>> dans keys, dans mon exemple "b", "c" et "t", pas l'entrée "m", sans
>> que cela
>> ne provoque une erreur à cause de "z".
>>
>> Donc :
>> resultat = { "t" : "TRUC", "b" : "BIDULE", "c" : "CHOSE" }
>>
>> =====
>>
>> Et maintenant le vrai problème.
>>
>> Je voudrais appeler une fonction du type :
>> def lafonction(b=None, c=None, t=None, z=None):
>> ....
>> en lui passant les valeurs pour b, c, t et z, si elles existent, se
>> trouvant
>> dans mon dictionnaire mondict. Du coup un truc du genre :
>> lafonction(**mondict)
>> mais sans que cela provoque une erreur à cause de l'entrée "m".
>>
>>
>> Cordialement,
>

[toc] | [prev] | [next] | [standalone]


Page 1 of 2  [1] 2  Next page →

Back to top | Article view | fr.comp.lang.python


csiph-web