Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > fr.comp.lang.python > #3531 > unrolled thread
| Started by | Olivier Miakinen <om+news@miakinen.net> |
|---|---|
| First post | 2021-05-25 00:13 +0200 |
| Last post | 2021-05-31 00:40 +0200 |
| Articles | 20 on this page of 22 — 5 participants |
Back to article view | Back to fr.comp.lang.python
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 →
| From | Olivier Miakinen <om+news@miakinen.net> |
|---|---|
| Date | 2021-05-25 00:13 +0200 |
| Subject | Extraire 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]
| From | Julien Palard <julien@palard.fr> |
|---|---|
| Date | 2021-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]
| From | Olivier Miakinen <om+news@miakinen.net> |
|---|---|
| Date | 2021-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]
| From | Olivier Miakinen <om+news@miakinen.net> |
|---|---|
| Date | 2021-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]
| From | Nicolas <nicolasp@aaton.com> |
|---|---|
| Date | 2021-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]
| From | Olivier Miakinen <om+news@miakinen.net> |
|---|---|
| Date | 2021-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]
| From | Nicolas <nicolasp@aaton.com> |
|---|---|
| Date | 2021-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]
| From | Nicolas <nicolasp@aaton.com> |
|---|---|
| Date | 2021-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]
| From | Olivier Miakinen <om+news@miakinen.net> |
|---|---|
| Date | 2021-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]
| From | Nicolas <nicolasp@aaton.com> |
|---|---|
| Date | 2021-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]
| From | Olivier Miakinen <om+news@miakinen.net> |
|---|---|
| Date | 2021-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]
| From | Alain Ketterlin <alain@universite-de-strasbourg.fr.invalid> |
|---|---|
| Date | 2021-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]
| From | Olivier Miakinen <om+news@miakinen.net> |
|---|---|
| Date | 2021-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]
| From | Nicolas <nicolasp@aaton.com> |
|---|---|
| Date | 2021-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]
| From | Olivier Miakinen <om+news@miakinen.net> |
|---|---|
| Date | 2021-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]
| From | Nicolas <nicolasp@aaton.com> |
|---|---|
| Date | 2021-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]
| From | Olivier Miakinen <om+news@miakinen.net> |
|---|---|
| Date | 2021-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]
| From | Nicolas <nicolasp@aaton.com> |
|---|---|
| Date | 2021-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]
| From | rejoc <rejoc@FREEfree.fr> |
|---|---|
| Date | 2021-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]
| From | rejoc <rejoc@FREEfree.fr> |
|---|---|
| Date | 2021-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