2012-01-12 40 views
9

Tôi có một danh sách các từ điển ví dụ:Cách tốt nhất để sắp xếp một từ điển thành các nhóm sử dụng Python

[{'person':'guybrush','job':'pirate'},{'person':'leChuck','job':'pirate'}, {'person':'elaine','job':'governor'}] 

Tôi muốn hiển thị những người nhóm lại theo công việc của họ. Vì vậy, trong giao diện người dùng, chúng tôi có thể chọn một công việc và xem tất cả những người có công việc đã chọn.

Tôi đã thực hiện chức năng như vậy trước khi sử dụng các vòng và danh sách lồng nhau gây nhầm lẫn.

Bạn nghĩ cách hiệu quả nhất để nhận kết quả này là gì?

pirate = ['guybrush','leChuck'] 
governor = ['elaine'] 
+1

thể trùng lặp của [nhóm Python bởi] (http://stackoverflow.com/questions/3749512/python-group-by) –

+0

bạn đúng, có vẻ như Ive đã sao chép một câu hỏi. Lấy làm tiếc! – JackalopeZero

+0

Nhanh nhẹn phải làm gì với nó? –

Trả lời

21

Đây là đơn giản sử dụng một defaultdict:

persons_by_jobs = defaultdict(list) 
for person in persons: 
    persons_by_jobs[person['job']].append(person['person']) 
+0

chỉ tò mò @ Björn Pollex Điều gì khiến bạn chọn điều này qua một hoạt động nhóm? – HussienK

+3

Nếu bạn đang nói về ['itertools.groupby'] (https://docs.python.org/3/library/itertools.html#itertools.groupby), nó yêu cầu danh sách đã được sắp xếp theo vị từ nhóm. Điều này có nghĩa là chúng tôi cần hai lần chuyển dữ liệu, một để sắp xếp và một để nhóm. Tôi nghĩ rằng giải pháp mà tôi đã trình bày ở đây đơn giản hơn và có khả năng hiệu quả hơn. –

Các vấn đề liên quan