Hướng dẫn remove duplicate dict in list python - loại bỏ dict trùng lặp trong danh sách python

Nếu sử dụng gói bên thứ ba sẽ ổn thì bạn có thể sử dụng iteration_utilities.unique_everseen:

>>> from iteration_utilities import unique_everseen
>>> l = [{'a': 123}, {'b': 123}, {'a': 123}]
>>> list[unique_everseen[l]]
[{'a': 123}, {'b': 123}]

Nó bảo tồn thứ tự của Danh sách ban đầu và UT cũng có thể xử lý các mục không thể chối cãi như từ điển bằng cách rơi trở lại trên thuật toán chậm hơn [O[n*m] trong đó n là các yếu tố trong danh sách ban đầu và m Các yếu tố duy nhất trong danh sách ban đầu thay vì

>>> list[unique_everseen[l, key=lambda item: frozenset[item.items[]]]]
[{'a': 123}, {'b': 123}]
0]. Trong trường hợp cả hai khóa và giá trị đều có thể băm, bạn có thể sử dụng đối số
>>> list[unique_everseen[l, key=lambda item: frozenset[item.items[]]]]
[{'a': 123}, {'b': 123}]
1 của hàm đó để tạo các mục có thể băm cho "thử nghiệm tính duy nhất" [để nó hoạt động trong ____10].

Trong trường hợp từ điển [so sánh độc lập với thứ tự], bạn cần ánh xạ nó cho một cấu trúc dữ liệu khác so sánh như thế, ví dụ

>>> list[unique_everseen[l, key=lambda item: frozenset[item.items[]]]]
[{'a': 123}, {'b': 123}]
3:

>>> list[unique_everseen[l, key=lambda item: frozenset[item.items[]]]]
[{'a': 123}, {'b': 123}]

Lưu ý rằng bạn không nên sử dụng cách tiếp cận

>>> list[unique_everseen[l, key=lambda item: frozenset[item.items[]]]]
[{'a': 123}, {'b': 123}]
4 đơn giản [không sắp xếp] vì từ điển bằng nhau không nhất thiết phải có cùng thứ tự [ngay cả trong Python 3.7 trong đó thứ tự chèn - không phải thứ tự tuyệt đối - được đảm bảo]:insertion order - not absolute order - is guaranteed]:

>>> d1 = {1: 1, 9: 9}
>>> d2 = {9: 9, 1: 1}
>>> d1 == d2
True
>>> tuple[d1.items[]] == tuple[d2.items[]]
False

Và thậm chí sắp xếp bộ tuple có thể không hoạt động nếu các phím không thể sắp xếp:

>>> d3 = {1: 1, 'a': 'a'}
>>> tuple[sorted[d3.items[]]]
TypeError: '

Bài Viết Liên Quan

Chủ Đề