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.