Re: [Python] Problemi con modulo time e dizionari

2013-08-19 Per discussione Marco Buttu

On 08/19/2013 03:04 PM, Massimo Capanni wrote:


Mi sono scritto così una funzione per calcolare il valore massimo in 
un dizionario (forse ci sono altri metodi, ma al momento ho 
reinventato la ruota per esercizio ...)


def max_dict(d):
v_max = 0
k_max = 0
for i in d.keys():
if d[i] > v_max:
v_max = d[i]
k_max = i
return k_max, v_max


Puoi semplicemente usare max():

>>> d = {1: 'uno', 3: 'tre', 2: 'due', 8: 'otto'}
>>> max(d), d[max(d)]
(8, 'otto')

Se non sono numeri ma stringhe che rappresentano numeri, usa ancora 
max(), passando il tipo come chiave

di conversione:

>>> d = {'1.22': 'uno.22', '10.33': 'dieci.33', '9.0': 'nove.0'}
>>> max(d)
'9.0'
>>> max(d, key=float)
'10.33'

Se ti serve un criterio di confronto diverso, puoi usare ancora max():

>>> max(d, key=lambda seq: seq[-2])
'10.33'



Purtroppo mi sono reso conto che dopo l'elaborazione dei dati nella 
funzione max_dict(), i valori relativi alla data e ora sono 
completamente sballati, come se max_dict() operasse qualche modifica.


Così invece di ottenere data e ora di oggi ottengo:

2003115192256 1018.6 MB
2003115192256 1018.6 MB
2003115192256 1018.6 MB
2003115192256 1018.6 MB
2003115192256 1018.6 MB
200311785544 1018.7 MB
200311785544 1018.7 MB
2006730161944 1.1 GB
2006730161944 1.1 GB

Dove sto sbagliando secondo voi?


Non mi pare il problema sia in max_dict(), se non per cio' che ti hanno 
gia' detto. Puoi postare il resto del codice?


--
Marco Buttu

INAF Osservatorio Astronomico di Cagliari
Loc. Poggio dei Pini, Strada 54 - 09012 Capoterra (CA) - Italy
Phone: +39 070 71180255
Email: mbu...@oa-cagliari.inaf.it

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


Re: [Python] Problemi con modulo time e dizionari

2013-08-19 Per discussione Marco Beri
2013/8/19 Massimo Capanni 

> le chiavi del dizionario sono i valori ritornati da time.time()
> dubbio: non è che l'interprete si incasina con valori float quando sono
> usati come chiavi? ...
>

Per cortesia, cerca di non top-quotare. Non muore nessuno, lo so, ma mi
infastidisce. E a te costa poco.

Ad ogni modo non hai letto con attenzione quanto ho scritto. Il problema è
la riga con cui compari i valori:

if d[i] > v_max:

Se sono stringhe, non puoi confrontarle pensando che Python capisca cosa
volevi dire.

Infatti:

>>> "un milione" > "un miliardo"
True

Meglio di così non so spiegartelo. Fai tu un po' di fatica adesso :-)

Ciao.
Marco.

-- 
http://beri.it/ - Un blog
http://beri.it/i-miei-libri/ - Qualche libro
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Problemi con modulo time e dizionari

2013-08-19 Per discussione Massimo Capanni
le chiavi del dizionario sono i valori ritornati da time.time()
dubbio: non è che l'interprete si incasina con valori float quando sono
usati come chiavi? ...


Il giorno 19 agosto 2013 15:09, Marco Beri  ha scritto:

> 2013/8/19 Massimo Capanni 
>
>> Dove sto sbagliando secondo voi?
>>
>
> Escludo che la funzione cambi i valori.
>
> Non è che stai paragonando tra di loro delle stringhe?
>
> >>> "1018.6 MB" > "1.1 GB"
> True
>
> Ciao.
> Marco.
>
> --
> http://beri.it/ - Un blog
> http://beri.it/i-miei-libri/ - Qualche libro
>
>
> ___
> Python mailing list
> Python@lists.python.it
> http://lists.python.it/mailman/listinfo/python
>
>
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Problemi con modulo time e dizionari

2013-08-19 Per discussione Marco Beri
2013/8/19 Massimo Capanni 

> Dove sto sbagliando secondo voi?
>

Escludo che la funzione cambi i valori.

Non è che stai paragonando tra di loro delle stringhe?

>>> "1018.6 MB" > "1.1 GB"
True

Ciao.
Marco.

-- 
http://beri.it/ - Un blog
http://beri.it/i-miei-libri/ - Qualche libro
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python