2013-07-25 41 views
7

Tôi có một danh sách các từ điển. Mỗi từ điển có một số nguyên và giá trị tuple. Tôi muốn tổng hợp tất cả các yếu tố nằm ở vị trí nhất định của bộ dữ liệu.Danh sách từ điển của Python [int: tuple] Sum

Ví dụ:

myList = [{1000:("a",10)},{1001:("b",20)},{1003:("c",30)},{1000:("d",40)}] 

Tôi biết tôi có thể làm điều gì đó như:

sum = 0 
for i in myList: 
    for i in myList: 
     temp = i.keys() 
     sum += i[temp[0]][1] 
print sum 

Có cách nào pythonic hơn để làm điều này? Cảm ơn

+2

Nguyên tắc chung của ngón tay cái: nếu bạn đang trực tiếp sử dụng một vòng lặp for có một cách pythonic hơn để làm việc. –

+5

@SlaterTyranus: Tôi sẽ không nói rằng, có rất nhiều sử dụng pythonic cho vòng lặp 'for'. –

+1

@MartijnPieters Tôi chắc chắn rằng chúng tồn tại, nhưng tôi cảm thấy như lên trên 90% của tất cả các đa dòng cho các vòng lặp là các chỉ số của mã cần phải được tái cấu trúc. Để làm rõ: bằng cách sử dụng trực tiếp vòng lặp for, tôi có nghĩa là không sử dụng cú pháp nội tuyến. –

Trả lời

7

Sử dụng một biểu thức máy phát điện, Looping trên tất cả các từ điển sau đó giá trị của chúng:

sum(v[1] for d in myList for v in d.itervalues()) 

Đối với Python 3, thay d.itervalues() với d.values().

Demo:

>>> sum(v[1] for d in myList for v in d.itervalues()) 
100 
0
import itertools 
sum((v[1][1] for v in itertools.chain(*[d.items() for d in myList]))) 

itertools có thể "chuỗi" cùng một số danh sách này để có một cách logic nhất.

0

Tôi không biết nếu điều này là một cách pythonic hơn:

print sum([i[i.keys()[0]][1] for i in myList]) 
Các vấn đề liên quan