2012-12-02 16 views
6

Mam słownik, który wygląda tak. . .Python - Jak znaleźć średnią wielu wartości/klucza w słowniku

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

i tak dalej. W sumie mam 48 różnych kluczy.

To, co próbuję uzyskać, to średnia z trzech liczb. Więc dostałbym dykt, który wygląda tak. . .

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

Próbowałem przy użyciu tej linii

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

Ale jestem coraz zbyt wiele wartości do rozpakowywania error pomysłów? Myślę, że można to również zrobić, umieszczając dyktando na liście i znajdując średnią z listy używając poleceń len i sum, a następnie konwertując z powrotem do dyktatu, ale tak naprawdę nie wiem, jak to zrobić. Dziękuję, mam wrażenie, że powinno to być łatwe.

Odpowiedz

5

trzeba iteracyjne nad CombinedDict.items() lub CombinedDict.iteritems() jeśli chcesz rozpakować do key, values

+1

'.iteritems()' dla Pythona 2.x – inspectorG4dget

+1

@ inspectorG4dget, ' .items() 'jest rzeczywiście lepszy w tym sensie, że jest" odporny na Python 3 ", chyba że naprawdę potrzebujesz optymalizacji dla list o dużej wartości. –

+0

@BenHoyt: Właśnie do tego służy narzędzie 2to3. Czy powinienem również zawijać wszystkie moje instrukcje drukowania w nawiasach? – Eric

0

for x in dictionary: ... iteruje klucze słownika.

O ile same klucze nie są krotkami, for a, b in dictionary spowoduje błąd, ponieważ próbuje rozpakować klucz na dwie wartości.

Dla iteracji słowniki, należy użyć items(), keys() i values() (lub ich odpowiedniki iter* w Pythonie 2.x)

0
python 3.2 

    >>> [(i,sum(v)//len(v)) for i,v in t.items()] 
Powiązane problemy