Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#26 Le 09/03/2021, à 22:17

Compte supprimé

Re : [RESOLU]Tri d'une liste de dictionnaires avec lambda et compréhension

chris7522 a écrit :

Ne serait il pas possible dans un premier temps de supprimer le dictionnaire qui ne contient pas de salaire .

Oui. Comme tu l'a fait: (d for d in liste if 's' in d)

chris7522 a écrit :

Ensuite faire le tri croissant .
  Une fois la liste triée,  récupérer le premier élément ([0]) pour connaître le nom de famille qui gagne le moins, et le dernier élément ([-1]) pour la famille qui gagne le plus.
   un truc comme ca :

 

def tri_dic(liste):
    liste_trie = liste.sorted((d for d in liste if 's' in d),key=lambda d:d['s'])
    return liste_trie
    
liste_trie = tri_dic(liste)
print(f"La famille qui gagne le moins :{liste_trie[0]['n']},La famille qui gagne le plus :{liste_trie[-1]['n']}")	

Non pas vraiment. En triant sur les salaires, tu tries les individus concernés, pas les familles.
Effectivement ton code (une fois corrigé : liste.sorted() ) retourne le résultat attendu mais c'est juste parce que, dans la liste que j'ai fourni, l'individu qui gagne le plus fait partie de la famille qui gagne le plus , et l'individu qui gagne le mois fait partie de la famille qui gagne le moins.

Il te faut trier la liste par les noms de famille, trouver un moyen pour additionner leurs revenus/comparer la somme obtenue avec celles des autres familles...

Si tu vois que tu n'y arrives pas, donne ta langue au chat^^

Dernière modification par Compte supprimé (Le 10/03/2021, à 00:00)

#27 Le 09/03/2021, à 23:11

MicP

Re : [RESOLU]Tri d'une liste de dictionnaires avec lambda et compréhension

Bonjour

Au cas où vous voudriez partager vos propositions de solutions,
vous pouvez aussi voir ce qui a été proposé dans ce fil de discussion

Hors ligne

#28 Le 10/03/2021, à 00:13

Compte supprimé

Re : [RESOLU]Tri d'une liste de dictionnaires avec lambda et compréhension

Bonjour MicP,
C'est plutôt amusant de voir l'exercice que j'ai inventé hier, se retrouver sur un autre forum.
J'imagine que @Chris est @steph big_smile
J'apprécie d'échanger sur python, donc sera avec plaisir que je partegerai mon approche ... wink

#29 Le 10/03/2021, à 03:28

MicP

Re : [RESOLU]Tri d'une liste de dictionnaires avec lambda et compréhension

…J'imagine que @Chris est @steph …

Peut-être,
ou alors c'est la même personne qui a donné par correspondance
le même exercice à faire à au moins trois personnes qui ne se connaissent même pas,
ou alors ce sont trois personnes qui ont donné le même exercice à faire à trois autres,
ou alors … etc.
car Il y a aussi chardonneret qui est sur le même problème

Et puis, quelle importance, puisque finalement, tout le monde va pouvoir profiter
de toutes ces propositions de solutions et des différentes façons d'y arriver. smile

Dernière modification par MicP (Le 10/03/2021, à 03:36)

Hors ligne

#30 Le 10/03/2021, à 08:46

Compte supprimé

Re : [RESOLU]Tri d'une liste de dictionnaires avec lambda et compréhension

MicP a écrit :

…Et puis, quelle importance, puisque finalement, tout le monde va pouvoir profiter
de toutes ces propositions de solutions et des différentes façons d'y arriver. smile

ça n'a effectivement aucune importance wink .
La lecture des autres intervenants m'ont enrichi ... Notamment, je n'avais pas en tête que l'on pouvait utiliser key avec min() et max().
Merci

#31 Le 10/03/2021, à 09:20

chris7522

Re : [RESOLU]Tri d'une liste de dictionnaires avec lambda et compréhension

J’aurai du vous en parler plus tot , je souffre de trouble dissociatif de l’identité . Autrement dit , plusieurs identités prennent tour à tour le contrôle de ma personne . Bien entendu , chris7522 est souverain , le maitre a penser en quelque sorte . Il gouverne avec une autorité absolue , mais comme il ne vaut pas un coup de cidre en tant qu’utilisateur python , parfois il délègue .
   C’est la que la transformation a lieu , tour a tour steph et chardonneret entre en scene et prennent enfin la lumiere , plus fort de ce que chris7522 leur a appris , il essaie de montrer qu’il connait son sujet mais en fait ne se sert que de ce que les autres lui ont suggéré .  Les sachant n’étant pas dupe de ses manoeuvres , il fini par quitter la scene lui et ses acolytes comme un clown désanchanté ... big_smile

Hors ligne

#32 Le 10/03/2021, à 09:27

Compte supprimé

Re : [RESOLU]Tri d'une liste de dictionnaires avec lambda et compréhension

hihihi , pas de souci vous êtes tous les bienvenus wink

#33 Le 10/03/2021, à 11:24

Compte supprimé

Re : [RESOLU]Tri d'une liste de dictionnaires avec lambda et compréhension

Je n'avais pas vu qu'une solution t'avais déjà été apporté .
Du coup, voici la mienne (modifiée avec min() et max() qui est de lecture plus explicite):

def family(l):
    sort_family_name = sorted(l, key= lambda d: d['n'])
    revenu = 0
    family_name = sort_family_name[0]['n']
    l_out =[]
    for d in sort_family_name:
        if "s" in d:
            if d['n'] == family_name:
                revenu += d['s']
            else:
                l_out.append((family_name, revenu))
                revenu = 0
                family_name = d['n']
    l_out.append((family_name, revenu))
    #l_out.sort()
    #return (l_out[0][0], l_out[-1][0])
    return (max(l_out, key= lambda t: t[1]), min(l_out, key= lambda t: t[1]))

laplusriche, lapluspauvre = family(l)
print(f"La famille {laplusriche} est celle qui gagne le plus.\
la famille {lapluspauvre} est celle qui gagne le moins.")

note: Pour ne pas alourdir le code, je ne traite pas des situations d'éventuelles égalités...

#34 Le 11/03/2021, à 10:39

Compte supprimé

Re : [RESOLU]Tri d'une liste de dictionnaires avec lambda et compréhension

chris7522 a écrit :

il fini par quitter la scene lui et ses acolytes comme un clown désanchanté ... big_smile

Bonjour @chris7522,
Ben non, il ne faut pas quitter la scéne. Il est tout à fait légitime de poster sur plusieurs forums. D'ailleurs procédant ainsi, tu auras plus de chance de trouver des réponses/conseils pertinents... wink

Sinon, pour t'exercer tu as aussi https://www.codewars.com/ . Les exercices sont classés par ordre de difficulté. 8 kyu est le niveau le plus facile. 1 kyu est le niveau le plus difficile.

Dernière modification par Compte supprimé (Le 11/03/2021, à 10:40)

#35 Le 11/03/2021, à 10:46

MicP

Re : [RESOLU]Tri d'une liste de dictionnaires avec lambda et compréhension

Bonjour @chris7522,
Ben non, il ne faut pas quitter la scéne. Il est tout à fait légitime de poster sur plusieurs forums. D'ailleurs procédant ainsi, tu auras plus de chance de trouver des réponses/conseils pertinants... wink

Je plussoie aussi,
il n'y avait aucun sous-entendu dans mes messages à ce sujet,
et je suis sûr que tous ceux qui ont pu suivre les liens ont pu apprécier les messages des autres,
et certains ont même pu y trouver une occasion d'étendre leurs recherches sur d'autres forums.

Hors ligne

#36 Le 12/03/2021, à 17:04

chris7522

Re : [RESOLU]Tri d'une liste de dictionnaires avec lambda et compréhension

Merci pseudofab pour la solution que tu me propose .  J'ai quelques difficultés de compréhension avec cette partie :

else:
                l_out.append((family_name, revenu))
                revenu = 0
                family_name = d['n']
    l_out.append((family_name, revenu))
    #l_out.sort()
    #return (l_out[0][0], l_out[-1][0])
    return (max(l_out, key= lambda t: t[1]), min(l_out, key= lambda t: t[1]))

Si cela ne t'ennuie pas , peux tu me m'expliquer pas a pas cette portion de code s'il te plait ?
Merci

Hors ligne

#37 Le 12/03/2021, à 21:59

Compte supprimé

Re : [RESOLU]Tri d'une liste de dictionnaires avec lambda et compréhension

C'est vrai que ce n'est pas forcement évident à lire. wink

for d in sort_family_name:
        if "s" in d:
            if d['n'] == family_name:     #si le nom de famille reste le même
                revenu += d['s']    #on ajoute le nouveau revenu
            else:  #sinon
                l_out.append((family_name, revenu))#on enregistre dans l_out ce nom de famille, et le revenu de la famille
                revenu = 0   #on remet le compteur des revenus à 0
                family_name = d['n'] #et on enregistre le nom de la nouvelle famille puis on reboucle (si le for n'est pas finit)
    l_out.append((family_name, revenu))#Ici on est sortit de la boucle for, on enregistre le nom de la dernière famille et son revenu

Dernière modification par Compte supprimé (Le 12/03/2021, à 22:00)

#38 Le 13/03/2021, à 13:23

chris7522

Re : [RESOLU]Tri d'une liste de dictionnaires avec lambda et compréhension

Ok , un peu complexe pour moi mais j’ai compris tout de même.
Merci

Hors ligne

#39 Le 13/03/2021, à 16:27

Compte supprimé

Re : [RESOLU]Tri d'une liste de dictionnaires avec lambda et compréhension

Le code ci dessous est beaucoup plus lisible.

def famille(l):
  m=dict() #ce dico aura pour clefs les noms de famille et pour valeurs leur gain
  for d in l:
    if "s" in d:
      if d["n"] in m:
        m[d["n"]]+=d["s"]
      else:
        m[d["n"]]=d["s"]
  return max(m.items(), key=lambda t:t[1]), min(m.items(), key=lambda t:t[1])

laplusriche, lapluspauvre = famille(l)

#40 Le 13/03/2021, à 20:10

chris7522

Re : [RESOLU]Tri d'une liste de dictionnaires avec lambda et compréhension

Je le préfère smile
J'ai trouvé ca pour les débutants comme moi qui désirent apprendre en s'amusant , mais je pense que ce site doit etre connu de tous :
https://www.codingame.com/start
Ca a l'air sympa .

Hors ligne

#41 Le 14/03/2021, à 09:58

Compte supprimé

Re : [RESOLU]Tri d'une liste de dictionnaires avec lambda et compréhension

Je n'ai pas pratiqué leurs exercices, donc je n'ai d'avis sur le contenu, mais j'avais trouvé leur interface particulièrement jolie et très ludique. De plus c'est traduit en français cool
à noter cependant, que codingame ne s'adresse pas juste à des débutants. (la difficulté augmente au fur et à mesure des réalisations).