2012-06-20 66 views
5

Giả sử tôi có danh sách các dicts. Tôi xác định "trùng lặp" như bất kỳ hai dicts trong danh sách có cùng giá trị cho trường "id" (ngay cả khi các trường khác là khác nhau). Làm thế nào để loại bỏ các bản sao này.Làm thế nào để loại bỏ dicts khỏi danh sách có các trường trùng lặp trong python?

Một danh sách ví dụ sẽ là một cái gì đó như:

[{'name': 'John' , 'id':1}, {'name': 'Mike' , 'id':5},{'name': 'Dan' , 'id':5}] 

Trong trường hợp này, 'Mike' và 'Dan' sẽ là bản sao, và một trong số họ cần phải được loại bỏ. Nó không quan trọng cái nào.

+1

Đây là một bản sao của một câu hỏi từ hôm qua http://stackoverflow.com/questions/11092511/python-list-of-unique-dictionaries –

+0

Đó là một chút khác nhau, kể từ khi người dùng muốn loại bỏ dicts rằng hoàn toàn giống hệt nhau, trong khi tôi muốn loại bỏ các đoạn mã giống hệt nhau trong một trường đơn, ngay cả khi tất cả các trường khác đều khác nhau. – philpee2

+0

Không, OP đã làm rõ trong một nhận xét rằng đây chính là điều họ muốn làm. Giải pháp là giống hệt nhau. Ngay cả tên trường cũng giống nhau –

Trả lời

11

Đưa chúng vào một từ điển khác, sau đó kéo chúng ra sau.

dict((x['id'], x) for x in L).values() 
2

Tính năng hiểu danh sách của hàm sau sẽ giải quyết được sự cố của bạn.

def f(seq): 
    s = set() 
    return [x for x in seq if x['id'] not in s and not s.add(x['id'])] 
Các vấn đề liên quan