Deutsch English Français Italiano |
<87zgjvvi8j.fsf@universite-de-strasbourg.fr.invalid> View for Bookmarking (what is this?) Look up another Usenet article |
Path: ...!news.mixmin.net!aioe.org!Faqf6A55NG1s8DSVkh3L9A.user.46.165.242.75.POSTED!not-for-mail From: Alain Ketterlin <alain@universite-de-strasbourg.fr.invalid> Newsgroups: fr.comp.lang.python Subject: Re: Mon code est lourd Date: Thu, 05 May 2022 22:26:20 +0200 Organization: =?utf-8?Q?Universit=C3=A9?= de Strasbourg Message-ID: <87zgjvvi8j.fsf@universite-de-strasbourg.fr.invalid> References: <62742832$0$22051$426a74cc@news.free.fr> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Injection-Info: gioia.aioe.org; logging-data="41499"; posting-host="Faqf6A55NG1s8DSVkh3L9A.user.gioia.aioe.org"; mail-complaints-to="abuse@aioe.org"; User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.2 (gnu/linux) X-Notice: Filtered by postfilter v. 0.9.2 Cancel-Lock: sha1:Pj4aMfybmducIc9xXjR2wbXNIug= Bytes: 2825 Lines: 73 yves <yves@free.invalid> writes: > ('02', 'D', '27') ('02', 'L', '28') ('03', 'M', '01') ('03', 'M', '02') > Je voudrais arriver =C3=A0 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 =3D {} > l02,l03 =3D [],[] > for elt in g(): > m , d, nd =3D elt > if m =3D=3D "02": > l02.append((d,nd)) > dic['02'] =3D l02 > elif m =3D=3D "03": > l03.append((d,nd)) > dic['03'] =3D l03 > > pprint(dic) > Vous auriez des suggestions d'=C3=A9criture plus =C3=A9l=C3=A9gante ? Note qu'il est inutile de garder tes listes "en double", mais qu'il faut alors tester leur pr=C3=A9sence dans le dictionnaire : for elt in g(): m , d, nd =3D elt if m not in dic: dic[m] =3D [] dic[m].append ((d,nd)) C'est =C3=A0 peu pr=C3=A8s exactement ce que fait la m=C3=A9thode setdefaul= t() de dict, donc on peut raccourcir : for m, d, nd in g(): dic.setdefault (m, []).append ((d,nd)) Note qu'on s'=C3=A9pargne aussi la variable "elt", puisqu'on peut destructurer directement dans le "for". Si =C3=A7a ne te g=C3=A8ne pas d'avoir des listes au lieu des paires, on pe= ut 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=C3=A9er d'embl=C3=A9e les listes vides, c= e qui =C3=A9pargne de r=C3=A9p=C3=A9ter le test pour chaque date : dic =3D { "{:02d}".format (i+1) : [] for i in range (12) } for m,*r in g(): dic[m].append (r) (Au passage : pourquoi utiliser des cha=C3=AEnes de caract=C3=A8res pour le= s mois ? Un entier serait plus simple =C3=A0 manipuler.) -- Alain.