2012-12-02 35 views
6

Ho un dizionario simile a questo. . .Python- Come trovare la media di più valori/chiave in un dizionario

CombinedDict = {'Abamectin': [63, 31, 53], 'Difenzoquat metilsulfate': [185, 49, 152], 'Chlorpyrifos': [14, 26, 56], 'Dibutyl phthalate': [25, -17, -18] 

e così via. In totale ho 48 chiavi diverse.

Quello che sto cercando di ottenere è la media dei tre numeri. Quindi avrei un dict che sembra così. . .

AvgDictName = {'Abamectin': [49], 'Difenzoquat metilsulfate': [128], 'Chlorpyrifos': [32], 'Dibutyl phthalate': [-3] . . . 

Ho provato con questa linea

AvgDictName = dict([(key, float(sum([int(i) for i in values]))/len(values)) for key, values in CombinedDict]) 

Ma io sono sempre troppi valori di disfare errore Tutte le idee? Penso che potrebbe essere fatto anche facendo il dict in una lista e trovando la media da una lista usando i comandi len e sum e poi convertendo di nuovo in un dict ma non so davvero come farlo. Grazie, ho la sensazione che questo dovrebbe essere facile.

risposta

5

È necessario iterare CombinedDict.items() o CombinedDict.iteritems() se si desidera decomprimere in key, values

+1

'.iteritems()' per Python 2.x – inspectorG4dget

+1

@ inspectorG4dget, ' .items() 'è in realtà migliore nel senso che è" Python 3 proof ", a meno che non sia davvero necessario ottimizzare per elenchi di grandi valori. –

+0

@BenHoyt: Ecco a cosa serve lo strumento 2to3. Dovrei avvolgere anche tutte le mie dichiarazioni di stampa tra parentesi? – Eric

0

for x in dictionary: ... itera le chiavi di un dizionario.

A meno che le chiavi stesse siano delle tuple, for a, b in dictionary errore poiché tenta di decomprimere la chiave in due valori.

per iterare dizionari, è necessario utilizzare items(), keys() e values() (oi loro equivalenti in iter* pitone 2.x)

0
python 3.2 

    >>> [(i,sum(v)//len(v)) for i,v in t.items()] 
Problemi correlati