Ordinare una lista annidata in un dizionario

R
Raffaele (3850 points)
10 24 48
asked Nov 5, 2020 in Programmare in Python by Raffaele (3,850 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.

4 Answers

Best answer
d
davide.marincione (1380 points)
0 4 14
answered Nov 5, 2020 by davide.marincione (1,380 points)
selected Nov 5, 2020 by Raffaele
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)
10 24 48
commented Nov 5, 2020 by Raffaele (3,850 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 4 14
commented Nov 5, 2020 by davide.marincione (1,380 points)
Beh oddio, dovrebbe essere abbastanza semplice:

for all values in dic
    sort value
d
davide.marincione (1380 points)
0 4 14
commented Nov 5, 2020 by davide.marincione (1,380 points)
edited Nov 5, 2020 by davide.marincione

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)
10 24 48
commented Nov 5, 2020 by Raffaele (3,850 points)
Creare un nuovo dizionario con zip è molto dispendioso purtroppo, però grazie comunque della buona volontà!
Rametto (4910 points)
3 4 25
answered Nov 5, 2020 by Rametto (4,910 points)
Potresti anche aiutarti con le lambda, per non appesantire il tutto e non utilizzando cicli
R
Raffaele (3850 points)
10 24 48
commented Nov 5, 2020 by Raffaele (3,850 points)
Puoi farmi degli esempi in pseducodice?
Marco Freddi (1420 points)
1 2 16
answered Nov 5, 2020 by Marco Freddi (1,420 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)
10 24 48
commented Nov 5, 2020 by Raffaele (3,850 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)
4 8 40
answered Nov 5, 2020 by Romitoskj (8,920 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.