Please ignore secret bonuses. Secret tests do NOT award bonus. Max hw grade is 30+2 bonus efficiency

Do you need help?

Notice Board

Per partecipare al corso di Fondamenti di programmazione 2023-24 loggatevi e attivatelo nella vostra pagina dei corsi preferiti. A quel punto il corso appare nel menù personale cliccando sul proprio avatar. Per i materiali degli anni precedenti seguite lo stesso metodo.

To join the Programming/Lab 2023-24 course, log-on and select it on the my courses page. It will appear on the personal menu of your avatar. For earlier years use the same method.

Aiuto con la key del sorted [hm02-es2]

a
antonio_varlese (370 points)
2 4 7
in Es2 by (370 points)
recategorized by
Ho un problema con l'ordinamento della tabella alla fine del es2.

Sto vedendo varie soluzioni online, ma in nessuna riesco a trovare una soluzione dunque mi chiedo, è possibile inserire nella key del sorted più criteri?

Pongo un esempio per chiarirmi.
Ho questa lista di dizionari:

list=[{'name':'AAAA', 'age':25},{'name':'DDDD', 'age':20},{'name':'CCCC', 'age':25},{'name':'CCCC', 'age':15}]

Vorrei raggiungere questa lista:

list=[{'name':'AAAA', 'age':25},{'name':'CCCC', 'age':15},{'name':'CCCC', 'age':25},{'name':'DDDD', 'age':20}]

Cioè un ordinamento prima per name, poi per age nel caso in cui vi siano dei name uguali. Lasciando solo l'ordinamento per nome, quando troverà nomi uguali me li inserirà semplicemente per come li incontra, dunque devo ordinare per due criteri.

Se ordino prima per nome esce questo:

list=[{'name':'AAAA', 'age':25},{'name':'CCCC', 'age':25},{'name':'CCCC', 'age':15},{'name':'DDDD', 'age':20}]

e se successivamente ordino per age ignora il precedente ordinamento e restituisce:

list=[{'name':'CCCC', 'age':15},{'name':'DDDD', 'age':20},{'name':'AAAA', 'age':25},{'name':'CCCC', 'age':25}]

e sono punto e accapo.

Uso questi comandi per ordinare:

list = sorted(list, key=lambda k: k['name']) e poi list = sorted(list, key=lambda k: k['age']), ma appunto così non segue entrambi gli ordinamenti e non saprei come inserirli entrambi in un solo sorted nella stessa key(anche senza usare la funzione lambda).

pls help
378 views
closed

1 Answer

Best answer
Sickboy (28240 points)
9 25 68
by (28.2k points)
selected by
Devi fare una funzione diversa dalla funzione lambda, dove returni i valori per cui vuoi ordinare, farai return nome, eta e te li ordinerá come hai chiesto
_andrea_ (45670 points)
13 42 297
by (45.7k points)
Anche con la lambda si può
Xriuk (13590 points)
8 24 116
by (13.6k points)
edited by
Esatto, puoi usare più indici contemporaneamene, e se ci metti un meno davanti inverti il senso di ordinamento dell'indice