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


Groups > fr.comp.lang.python > #3838

Re: Mon code est lourd

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>

Show all headers | View raw


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 | NextPrevious in thread | Next in thread | Find similar


Thread

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