2012-02-05 45 views
19

Tôi có một danh sách -myList - trong đó mỗi phần tử là một từ điển. Tôi muốn lặp qua danh sách này nhưng tôi chỉ thú vị trong một thuộc tính - 'tuổi' - trong mỗi từ điển mỗi lần. Tôi cũng quan tâm đến việc đếm số lần lặp lại.Lặp lại danh sách từ điển

tôi làm:

for i, entry in enumerate(myList): 
    print i; 
    print entry['age']; 

Nhưng đã tự hỏi là có một cái gì đó hơn pythonic. Có lời khuyên nào không?

+1

Phụ thuộc vào những gì bạn muốn làm gì với nó. Nếu tất cả các bạn muốn làm là in nó, điều này là tốt. Nếu bạn muốn tạo một danh sách mới với một số chức năng của tuổi tác (nói tối đa), bạn có thể sử dụng listcomp hoặc genexp. Nhưng nếu bạn muốn thực hiện rất nhiều phân nhánh vào mục ['age'], hãy gắn bó với vòng lặp for. [Và bạn có thể bỏ qua dấu chấm phẩy ..] – DSM

Trả lời

22

Bạn có thể sử dụng một máy phát điện để chỉ lấy tuổi.

# Get a dictionary 
myList = [{'age':x} for x in range(1,10)] 

# Enumerate ages 
for i, age in enumerate(d['age'] for d in myList): 
    print i,age 

Và, vâng, không sử dụng dấu chấm phẩy.

4

Để in, có thể những gì bạn đang làm chỉ là đúng. Nhưng nếu bạn muốn để lưu trữ các giá trị, bạn có thể sử dụng một danh sách hiểu:

>>> d_list = [dict((('age', x), ('foo', 1))) for x in range(10)] 
>>> d_list 
[{'age': 0, 'foo': 1}, {'age': 1, 'foo': 1}, {'age': 2, 'foo': 1}, {'age': 3, 'foo': 1}, {'age': 4, 'foo': 1}, {'age': 5, 'foo': 1}, {'age': 6, 'foo': 1}, {'age': 7, 'foo': 1}, {'age': 8, 'foo': 1}, {'age': 9, 'foo': 1}] 
>>> ages = [d['age'] for d in d_list] 
>>> ages 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
>>> len(ages) 
10 
2

Các dấu chấm phẩy ở cuối dòng là không cần thiết trong Python (mặc dù bạn có thể sử dụng chúng nếu bạn muốn đặt nhiều câu lệnh trên cùng một dòng). Vì vậy, nó sẽ được thêm pythonic để bỏ qua chúng.

Nhưng chiến lược lặp lại thực tế rất dễ làm theo và khá rõ ràng về những gì bạn đang làm. Có khác cách để làm điều đó. Nhưng một vòng lặp rõ ràng là hoàn hảo pythonic.

(Niklas B. của câu trả lời sẽ không làm chính xác những gì bạn đang thực hiện: nếu bạn muốn làm một cái gì đó như thế, chuỗi định dạng nên "{0}\n{1}".)

14

cách Rất đơn giản, danh sách các từ điển lặp

>>> my_list 
[{'age': 0, 'name': 'A'}, {'age': 1, 'name': 'B'}, {'age': 2, 'name': 'C'}, {'age': 3, 'name': 'D'}, {'age': 4, 'name': 'E'}, {'age': 5, 'name': 'F'}] 

>>> ages = [li['age'] for li in my_list] 

>>> ages 
[0, 1, 2, 3, 4, 5] 
Các vấn đề liên quan