2012-12-02 51 views
6

Tôi có từ điển giống như thế này. . .Python- Cách tìm giá trị trung bình của nhiều giá trị/khóa trong từ điển

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

v.v. Tổng cộng tôi có 48 phím khác nhau.

Điều tôi đang cố gắng đạt được là trung bình của ba số. Vì vậy, tôi sẽ nhận được một dict trông như thế này. . .

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

Tôi đã thử sử dụng dòng này

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

Nhưng tôi nhận được quá nhiều giá trị để giải nén lỗi Bất kỳ ý tưởng? Tôi nghĩ rằng nó cũng có thể được thực hiện bằng cách làm cho dict vào một danh sách và tìm trung bình từ một danh sách bằng cách sử dụng len và tổng lệnh và sau đó chuyển đổi trở lại một dict nhưng tôi không thực sự biết làm thế nào để đi về điều đó. Cảm ơn bạn, tôi có cảm giác điều này dễ dàng.

Trả lời

5

Bạn cần để lặp qua CombinedDict.items() hoặc CombinedDict.iteritems() nếu bạn muốn giải nén vào key, values

+1

'.iteritems() 'cho python 2.x – inspectorG4dget

+1

@ inspectorG4dget,' .items() 'thực sự tốt hơn theo nghĩa là" bằng chứng Python 3 ", trừ khi bạn thực sự cần tối ưu hóa cho các danh sách giá trị lớn. –

+0

@ BenHoyt: Đó là công cụ 2to3 dành cho. Tôi có nên quấn tất cả các câu lệnh in của mình trong dấu ngoặc đơn không? – Eric

0

for x in dictionary: ... lặp trên các phím của một cuốn từ điển.

Trừ khi chính các khóa đó là bộ dữ liệu, for a, b in dictionary sẽ bị lỗi vì nó cố gắng giải nén khóa thành hai giá trị.

Đối lặp lại từ điển, bạn nên sử dụng items(), keys(), và values() (hoặc iter* tương đương của họ trong python 2.x)

0
python 3.2 

    >>> [(i,sum(v)//len(v)) for i,v in t.items()] 
Các vấn đề liên quan