Re: [Python] Domanda sui dizionari.

2019-02-11 Per discussione Stefano Dal Pra
prova a guardare qui:
https://pymotw.com/2/collections/ordereddict.html
Stefano

On Mon, Feb 11, 2019 at 5:19 PM Marco De Paoli  wrote:

> ciao Gabriele,
>
> Il giorno lun 11 feb 2019 alle ore 16:38 Gabriele Battaglia <
> iz4...@libero.it> ha scritto:
>
>> Ciao a tutti.
>> Quanto tempo!
>> Dunque dunque, vediamo chi, fra i sopravvissuti all'influenza, tremenda,
>> di quest'anno, avrà voglia di leggere la mia domanda e darmi una dritta.
>>
>> Siamo nella fase finale di un gioco ed è ora di stampare la classifica
>> dei vittoriosi.
>>
>> Ho un dizionario che ha questa struttura:
>>
>> giocatori= {'nome' : [ punteggio, vittorie, patte, sconfitte ] }
>>
>> Posso pertanto accedere facilmente ai dati dei singoli giocatori, ad
>> esempio per conoscere il numero di vittorie accumulate da Valter
>> interrogherò giocatori['Valter'][1]
>>
>> Il problema sorge quando devo stampare una classifica. L'utente può
>> decidere se la vuole basata sul punteggio piuttosto che sul numero di
>> vittorie, se la vuole ascendente o discendente.
>>
>
> FIELDS = ['nome', 'punteggio', 'vittorie', 'patte', 'sconfitte']
>
> def output(d, field_name, reverse=False):
> pos = FIELDS.index(field_name)
> direction = "inversa " if reverse else ""
> flat = [(n, *v) for n, v in giocatori.items()]
> print(f"Classifica ordinata {direction}per {field_name}")
> print("\n".join(["\t".join(map(str, r)) for r in sorted(flat,
> key=lambda r: r[pos], reverse=reverse)]))
>
> giocatori= {
> 'nc' : [1, 50],
> 'nd' : [2, 10],
> 'nb' : [3, 30],
> 'ne' : [4, 20],
> 'na' : [5, 40],
> }
>
> output(giocatori, 'nome')
> output(giocatori, 'vittorie')
> output(giocatori, 'vittorie', True)
>
> Si avvicina a quello che avevi in mente?
>
> Marco
> ___
> Python mailing list
> Python@lists.python.it
> https://lists.python.it/mailman/listinfo/python
>
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] Domanda sui dizionari.

2019-02-11 Per discussione Marco De Paoli
ciao Gabriele,

Il giorno lun 11 feb 2019 alle ore 16:38 Gabriele Battaglia <
iz4...@libero.it> ha scritto:

> Ciao a tutti.
> Quanto tempo!
> Dunque dunque, vediamo chi, fra i sopravvissuti all'influenza, tremenda,
> di quest'anno, avrà voglia di leggere la mia domanda e darmi una dritta.
>
> Siamo nella fase finale di un gioco ed è ora di stampare la classifica
> dei vittoriosi.
>
> Ho un dizionario che ha questa struttura:
>
> giocatori= {'nome' : [ punteggio, vittorie, patte, sconfitte ] }
>
> Posso pertanto accedere facilmente ai dati dei singoli giocatori, ad
> esempio per conoscere il numero di vittorie accumulate da Valter
> interrogherò giocatori['Valter'][1]
>
> Il problema sorge quando devo stampare una classifica. L'utente può
> decidere se la vuole basata sul punteggio piuttosto che sul numero di
> vittorie, se la vuole ascendente o discendente.
>

FIELDS = ['nome', 'punteggio', 'vittorie', 'patte', 'sconfitte']

def output(d, field_name, reverse=False):
pos = FIELDS.index(field_name)
direction = "inversa " if reverse else ""
flat = [(n, *v) for n, v in giocatori.items()]
print(f"Classifica ordinata {direction}per {field_name}")
print("\n".join(["\t".join(map(str, r)) for r in sorted(flat,
key=lambda r: r[pos], reverse=reverse)]))

giocatori= {
'nc' : [1, 50],
'nd' : [2, 10],
'nb' : [3, 30],
'ne' : [4, 20],
'na' : [5, 40],
}

output(giocatori, 'nome')
output(giocatori, 'vittorie')
output(giocatori, 'vittorie', True)

Si avvicina a quello che avevi in mente?

Marco
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


[Python] Domanda sui dizionari.

2019-02-11 Per discussione Gabriele Battaglia

Ciao a tutti.
Quanto tempo!
Dunque dunque, vediamo chi, fra i sopravvissuti all'influenza, tremenda, 
di quest'anno, avrà voglia di leggere la mia domanda e darmi una dritta.


Siamo nella fase finale di un gioco ed è ora di stampare la classifica 
dei vittoriosi.


Ho un dizionario che ha questa struttura:

giocatori= {'nome' : [ punteggio, vittorie, patte, sconfitte ] }

Posso pertanto accedere facilmente ai dati dei singoli giocatori, ad 
esempio per conoscere il numero di vittorie accumulate da Valter 
interrogherò giocatori['Valter'][1]


Il problema sorge quando devo stampare una classifica. L'utente può 
decidere se la vuole basata sul punteggio piuttosto che sul numero di 
vittorie, se la vuole ascendente o discendente.


Mi pare che, parlo di Python3, non ci sia alcun ordine, dentro ad un 
dizionario, quindi non posso riordinare le coppie chiave:valore. Nemmeno 
copiarle in un dizionario nuovo è una soluzione, perchè anche là si 
mescoleranno fra loro.


Potrei non salvare la classifica in alcuna variabile e stamparla riga 
per riga, coppia per coppia, man mano che calcolo la classifica iterando 
sul dato di riferimento, però mi sembra una soluzione poco elegante.

Voi come risolvereste?

Grazie.

Gabriele.
--
Gabriele Battaglia, IZ4APU (Libero)
Sent from TB on Windows 10, Genus Bononiae's computer.
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python