Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > fr.comp.lang.python > #3838
| From | Alain Ketterlin <alain@universite-de-strasbourg.fr.invalid> |
|---|---|
| Newsgroups | fr.comp.lang.python |
| Subject | Re: Mon code est lourd |
| Date | 2022-05-05 22:26 +0200 |
| Organization | Université de Strasbourg |
| Message-ID | <87zgjvvi8j.fsf@universite-de-strasbourg.fr.invalid> (permalink) |
| References | <62742832$0$22051$426a74cc@news.free.fr> |
yves <yves@free.invalid> writes:
> ('02', 'D', '27') ('02', 'L', '28') ('03', 'M', '01') ('03', 'M', '02')
> Je voudrais arriver à imprimer:
> 02
> D 27
> L 28
> 03
> M 01
> M 02
>
> def g():
> yield('02', 'D', '27')
> yield('02', 'L', '28')
> yield('03', 'M', '01')
> yield('03', 'M', '02')
>
>
> dic = {}
> l02,l03 = [],[]
> for elt in g():
> m , d, nd = elt
> if m == "02":
> l02.append((d,nd))
> dic['02'] = l02
> elif m == "03":
> l03.append((d,nd))
> dic['03'] = l03
>
> pprint(dic)
> Vous auriez des suggestions d'écriture plus élégante ?
Note qu'il est inutile de garder tes listes "en double", mais qu'il
faut alors tester leur présence dans le dictionnaire :
for elt in g():
m , d, nd = elt
if m not in dic:
dic[m] = []
dic[m].append ((d,nd))
C'est à peu près exactement ce que fait la méthode setdefault() de dict,
donc on peut raccourcir :
for m, d, nd in g():
dic.setdefault (m, []).append ((d,nd))
Note qu'on s'épargne aussi la variable "elt", puisqu'on peut
destructurer directement dans le "for".
Si ça ne te gène pas d'avoir des listes au lieu des paires, on peut
faire encore un peu plus court :
for m, *r in g():
dic.setdefault (m, []).append (r)
Cela dit, puisqu'il y a douze mois, et que j'imagine que tu auras des
dates dans chaque mois, autant créer d'emblée les listes vides, ce qui
épargne de répéter le test pour chaque date :
dic = { "{:02d}".format (i+1) : [] for i in range (12) }
for m,*r in g():
dic[m].append (r)
(Au passage : pourquoi utiliser des chaînes de caractères pour les mois ?
Un entier serait plus simple à manipuler.)
-- Alain.
Back to fr.comp.lang.python | Previous | Next — Previous in thread | Next in thread | Find similar
Mon code est lourd yves <yves@free.invalid> - 2022-05-05 19:40 +0000
Re: Mon code est lourd yves <yves@free.invalid> - 2022-05-05 19:42 +0000
Re: Mon code est lourd yves <yves@free.invalid> - 2022-05-05 19:43 +0000
Re: Mon code est lourd yves <yves@free.invalid> - 2022-05-05 19:47 +0000
Re: Mon code est lourd yamo' <user@tld.invalid> - 2022-05-09 07:56 +0000
Re: Mon code est lourd yves <yves@free.invalid> - 2022-05-09 08:32 +0000
Re: Mon code est lourd Benoit Izac <use.reply.to@INVALID.ADDRESS> - 2022-05-05 22:12 +0200
Re: Mon code est lourd yves <yves@free.invalid> - 2022-05-06 13:22 +0000
Re: Mon code est lourd Alain Ketterlin <alain@universite-de-strasbourg.fr.invalid> - 2022-05-05 22:26 +0200
Re: Mon code est lourd Dominique <zzz@aol.com.invalid> - 2022-05-06 06:40 +0200
Re: Mon code est lourd Alain Ketterlin <alain@universite-de-strasbourg.fr.invalid> - 2022-05-06 11:30 +0200
Re: Mon code est lourd Dominique <zzz@aol.com.invalid> - 2022-05-06 15:43 +0200
Re: Mon code est lourd Eric Demeester <neuneu@potiron.invalid> - 2022-05-08 12:19 +0200
Re: Mon code est lourd yves <yves@free.invalid> - 2022-05-06 13:42 +0000
Re: Mon code est lourd Alain Ketterlin <alain@universite-de-strasbourg.fr.invalid> - 2022-05-06 21:46 +0200
Re: Mon code est lourd yves <yves@free.invalid> - 2022-05-06 20:50 +0000
csiph-web