#26 Le 09/03/2021, à 21:17
- Compte supprimé
Re : [RESOLU]Tri d'une liste de dictionnaires avec lambda et compréhension
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)
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 09/03/2021, à 23:00)
#27 Le 09/03/2021, à 22: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 09/03/2021, à 23: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
J'apprécie d'échanger sur python, donc sera avec plaisir que je partegerai mon approche ...
#29 Le 10/03/2021, à 02: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.
Dernière modification par MicP (Le 10/03/2021, à 02:36)
Hors ligne
#30 Le 10/03/2021, à 07:46
- Compte supprimé
Re : [RESOLU]Tri d'une liste de dictionnaires avec lambda et compréhension
…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.
ça n'a effectivement aucune importance .
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, à 08: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é ...
Hors ligne
#32 Le 10/03/2021, à 08: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
#33 Le 10/03/2021, à 10: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, à 09:39
- Compte supprimé
Re : [RESOLU]Tri d'une liste de dictionnaires avec lambda et compréhension
il fini par quitter la scene lui et ses acolytes comme un clown désanchanté ...
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...
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, à 09:40)
#35 Le 11/03/2021, à 09: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, à 16: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, à 20: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.
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, à 21:00)
#38 Le 13/03/2021, à 12: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, à 15: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, à 19:10
- chris7522
Re : [RESOLU]Tri d'une liste de dictionnaires avec lambda et compréhension
Je le préfère
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, à 08: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
à noter cependant, que codingame ne s'adresse pas juste à des débutants. (la difficulté augmente au fur et à mesure des réalisations).