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

Do you need help?

Ordinare una lista annidata in un dizionario

R
Raffaele (3850 points)
16 27 49
in Programmare in Python by (3.9k points)
Sapete dirmi qual'è il modo più veloce per ordinare tutte le liste all'interno di un determinato dizionario?Le liste da ordinare sono i valori del dizionario stesso, non le chiavi.

Faccio un esempio

{1:['a' ,'q' ,'r' ,' t' ,'l' ,' b' ], 2:[10,4,1,8,200,12]}

La funzione deve ritornare il dizionario con le liste ordinate senza ricreare il dizionario e deve sfruttare le caratteristiche di python senza importare librerie esterne.

Possibilmente evitando anche di usare cicli for e while.
690 views
closed

4 Answers

Best answer
d
davide.marincione (1380 points)
0 5 14
by (1.4k points)
selected by
Hai due metodi:
1- fare un "for key in dic" e per ogni chiave riprendi il suo valore nel dizionario e chiami il metodo sort.
2- oppure richiami il metodo dic.values(), cicli attraverso quello (oppure usi un map()) e richiami il metodo sort.
R
Raffaele (3850 points)
16 27 49
by (3.9k points)
Si in effetti potrebbe essere più veloce, mi puoi scrivere uno pseudocodice della soluzione con il metodo map?
d
davide.marincione (1380 points)
0 5 14
by (1.4k points)
Beh oddio, dovrebbe essere abbastanza semplice:

for all values in dic
    sort value
d
davide.marincione (1380 points)
0 5 14
by (1.4k points)
edited by

Con il metodo map però purtroppo si deve per forza creare un nuovo dizionario:

sorted_values← map sorted on values in dic
result_dic←dict from zip of dic keys and sorted_values

(piccola nota, una map non è usabile come argomento di uno zip, quindi dovresti prima castarla in una lista) scemenza mia, si può eccome

R
Raffaele (3850 points)
16 27 49
by (3.9k points)
Creare un nuovo dizionario con zip è molto dispendioso purtroppo, però grazie comunque della buona volontà!
Rametto (4910 points)
3 4 25
by (4.9k points)
Potresti anche aiutarti con le lambda, per non appesantire il tutto e non utilizzando cicli
R
Raffaele (3850 points)
16 27 49
by (3.9k points)
Puoi farmi degli esempi in pseducodice?
Marco Freddi (1420 points)
1 2 16
by (1.4k points)
Beh, un metodo (magari non il migliore) è che ti fai dare la lista delle chiavi con keys(), per poi ordinare le liste del dizionario, prelevate una alla volta tramite la lista di chiavi con il ciclo.
Per questo metodo ti servirà un for probabilmente, mi dispiace. : /
R
Raffaele (3850 points)
16 27 49
by (3.9k points)
È la stessa soluzione che ho trovato io, ma purtroppo mi sembra poco efficiente proprio perché si basa sul ciclo for. Grazie comunque.
Romitoskj (8920 points)
5 8 40
by (8.9k points)
Evitando cicli la vedo dura, io farei un for sulle chiavi del dizionario (attraverso il metodo keys) e per ogni valore userei il metodo sort.