Re: Mon code est lourd

Liste des GroupesRevenir à fcl python 
Sujet : Re: Mon code est lourd
De : alain (at) *nospam* universite-de-strasbourg.fr.invalid (Alain Ketterlin)
Groupes : fr.comp.lang.python
Date : 05. May 2022, 22:26:20
Autres entêtes
Organisation : Université de Strasbourg
Message-ID : <87zgjvvi8j.fsf@universite-de-strasbourg.fr.invalid>
References : 1
User-Agent : Gnus/5.13 (Gnus v5.13) Emacs/25.2 (gnu/linux)
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.

Date Sujet#  Auteur
5 May 22 * Mon code est lourd16yves
5 May 22 +* Re: Mon code est lourd5yves
5 May 22 i`* Re: Mon code est lourd4yves
5 May 22 i `* Re: Mon code est lourd3yves
9 May 22 i  `* Re: Mon code est lourd2yamo'
9 May 22 i   `- Re: Mon code est lourd1yves
5 May 22 +* Re: Mon code est lourd2Benoit Izac
6 May 22 i`- Re: Mon code est lourd1yves
5 May 22 `* Re: Mon code est lourd8Alain Ketterlin
6 May 22  +* Re: Mon code est lourd4Dominique
6 May 22  i`* Re: Mon code est lourd3Alain Ketterlin
6 May 22  i `* Re: Mon code est lourd2Dominique
8 May 22  i  `- Re: Mon code est lourd1Eric Demeester
6 May 22  `* Re: Mon code est lourd3yves
6 May 22   `* Re: Mon code est lourd2Alain Ketterlin
6 May 22    `- Re: Mon code est lourd1yves

Haut de la page

Les messages affichés proviennent d'usenet.

NewsPortal