2013-06-14 45 views
6

Nói rằng tôi có một danh sách các từ điển có tên và lứa tuổi và các thông tin khác, như vậy:Python Values ​​Truy cập trong danh sách các từ điển

thisismylist= [ 
       {'Name': 'Albert' , 'Age': 16}, 
       {'Name': 'Suzy', 'Age': 17}, 
       {'Name': 'Johnny', 'Age': 13} 
] 

Làm thế nào tôi sẽ đi về in sau sử dụng một vòng lặp for:

Albert 
Suzy 
Johnny 

tôi chỉ không thể quấn quanh đầu tôi ý tưởng này ...

Trả lời

3

Hình như bạn cần phải đi qua Python flow-control documentation. Về cơ bản, bạn chỉ cần lặp qua tất cả các mục trong danh sách của bạn, và sau đó cho mỗi mục trong số đó (từ điển, trong trường hợp này) bạn có thể truy cập bất kỳ giá trị nào bạn muốn. Ví dụ, mã bên dưới sẽ in ra mọi giá trị trong mọi từ điển trong danh sách.

for d in my_list: 
    for key in d: 
     print d[key] 

Lưu ý rằng điều này không in các khóa, chỉ là giá trị. Để in các phím, hãy viết câu lệnh in print key, d[key]. Thật dễ dàng!

Nhưng thực sự, hãy đọc tài liệu kiểm soát luồng; nó rất đẹp.

12

Nếu bạn chỉ tìm kiếm các giá trị liên quan đến 'Tên', mã của bạn sẽ giống như thế:

for d in thisismylist: 
    print d['Name'] 
0

Bạn có thể chiếu các Name thuộc tính ra khỏi mỗi phần tử trong danh sách và tham gia các kết quả với dòng mới :

>>> print '\n'.join(x['Name'] for x in thisismylist) 
Albert 
Suzy 
Johnny 

Sửa

Nó đã cho tôi một vài phút, nhưng tôi nhớ o có cách thú vị để làm điều này. Bạn cũng có thể sử dụng kết hợp itertools và mô-đun operator để thực hiện việc này. Bạn có thể see it on repl.it too.

>>> from itertools import imap 
>>> from operator import itemgetter 
>>> print '\n'.join(imap(itemgetter('Name'), thisismylist)) 
Albert 
Suzy 
Johnny 

Trong mọi trường hợp, bạn có thể sử dụng vanilla for vòng lặp tốt hơn, nhưng tôi đã tìm ra một số tùy chọn khác.

5

Nếu bạn muốn có một danh sách những giá trị:

>>> [d['Name'] for d in thisismylist] 
['Albert', 'Suzy', 'Johnny'] 

Cùng phương pháp, bạn có thể có được một tuple của dữ liệu:

>>> [(d['Name'],d['Age']) for d in thisismylist] 
[('Albert', 16), ('Suzy', 17), ('Johnny', 13)] 

Hoặc, lần lượt các danh sách dicts thành một chìa khóa duy nhất , từ điển cặp giá trị:

>>> {d['Name']:d['Age'] for d in thisismylist} 
{'Johnny': 13, 'Albert': 16, 'Suzy': 17} 

Vì vậy, cùng một phương pháp, cách in:

>>> print '\n'.join(d['Name'] for d in thisismylist) 
Albert 
Suzy 
Johnny 

Và bạn có thể in nó được sắp xếp nếu bạn muốn:

>>> print '\n'.join(sorted(d['Name'] for d in thisismylist)) 
Albert 
Johnny 
Suzy 

Hoặc, sắp xếp theo lứa tuổi của họ trong khi làm phẳng danh sách:

>>> for name, age in sorted([(d['Name'],d['Age']) for d in thisismylist],key=lambda t:t[1]): 
... print '{}: {}'.format(name,age) 
... 
Johnny: 13 
Albert: 16 
Suzy: 17 
0

Một cách viết tắt để làm điều này mà không cần nhập khẩu các thư viện :

print('\n'.join([e["Name"] for e in thisismylist])) 
1

Mã sau đây sẽ hoạt động hoàn hảo.

for var in thisismylist: 
    print var['Name'] 
Các vấn đề liên quan