Hướng dẫn find duplicates in list of dictionaries python - tìm các bản sao trong danh sách từ điển python

Nói chung, nếu bạn muốn tìm bản sao trong danh sách các từ điển, bạn nên phân loại từ điển của mình theo cách trùng lặp những người ở trong cùng một nhóm. Với mục đích đó, bạn cần phân loại dựa trên các mục dict. Bây giờ, vì đối với thứ tự từ điển không phải là một yếu tố quan trọng, bạn cần sử dụng một thùng chứa vừa có thể băm vừa không giữ thứ tự của container của nó. Một frozenset[] là lựa chọn tốt nhất cho nhiệm vụ này.

Example:

In [87]: lst = [{2: 4, 6: 0},{20: 41, 60: 88},{5: 10, 2: 4, 6: 0},{20: 41, 60: 88},{2: 4, 6: 0}]

In [88]: result = defaultdict[list]

In [89]: for i, d in enumerate[lst]:
    ...:     result[frozenset[d.items[]]].append[i]
    ...:     
In [91]: result
Out[91]: 
defaultdict[list,
            {frozenset[{[2, 4], [6, 0]}]: [0, 4],
             frozenset[{[20, 41], [60, 88]}]: [1, 3],
             frozenset[{[2, 4], [5, 10], [6, 0]}]: [2]}]

Và trong trường hợp này, bạn có thể phân loại từ điển của mình dựa trên khóa

>>> from collections import defaultdict
>>> 
>>> d = defaultdict[list]
>>> 
>>> for i in a:
...     d[i['un']].append[i]
... 
>>> d
defaultdict[, {'a': [{'un': 'a', 'id': 'cd'}, {'un': 'a', 'id': 'cm'}], 'c': [{'un': 'c', 'id': 'vd'}, {'un': 'c', 'id': 'a'}, {'un': 'c', 'id': 'vd'}], 'b': [{'un': 'b', 'id': 'cd'}, {'un': 'b', 'id': 'cd'}]}]
>>> 
>>> keeps = {'a': 'cm', 'b':'cd', 'c':'vd'} # the key is 'un' and the value is 'id' should be keep for that 'un'
>>> 
>>> [i for key, val in d.items[] for i in val if i['id']==keeps[key]]
[{'un': 'a', 'id': 'cm'}, {'un': 'c', 'id': 'vd'}, {'un': 'c', 'id': 'vd'}, {'un': 'b', 'id': 'cd'}, {'un': 'b', 'id': 'cd'}]
>>> 
0 sau đó chọn các mục dự kiến ​​dựa trên
>>> from collections import defaultdict
>>> 
>>> d = defaultdict[list]
>>> 
>>> for i in a:
...     d[i['un']].append[i]
... 
>>> d
defaultdict[, {'a': [{'un': 'a', 'id': 'cd'}, {'un': 'a', 'id': 'cm'}], 'c': [{'un': 'c', 'id': 'vd'}, {'un': 'c', 'id': 'a'}, {'un': 'c', 'id': 'vd'}], 'b': [{'un': 'b', 'id': 'cd'}, {'un': 'b', 'id': 'cd'}]}]
>>> 
>>> keeps = {'a': 'cm', 'b':'cd', 'c':'vd'} # the key is 'un' and the value is 'id' should be keep for that 'un'
>>> 
>>> [i for key, val in d.items[] for i in val if i['id']==keeps[key]]
[{'un': 'a', 'id': 'cm'}, {'un': 'c', 'id': 'vd'}, {'un': 'c', 'id': 'vd'}, {'un': 'b', 'id': 'cd'}, {'un': 'b', 'id': 'cd'}]
>>> 
1:

>>> from collections import defaultdict
>>> 
>>> d = defaultdict[list]
>>> 
>>> for i in a:
...     d[i['un']].append[i]
... 
>>> d
defaultdict[, {'a': [{'un': 'a', 'id': 'cd'}, {'un': 'a', 'id': 'cm'}], 'c': [{'un': 'c', 'id': 'vd'}, {'un': 'c', 'id': 'a'}, {'un': 'c', 'id': 'vd'}], 'b': [{'un': 'b', 'id': 'cd'}, {'un': 'b', 'id': 'cd'}]}]
>>> 
>>> keeps = {'a': 'cm', 'b':'cd', 'c':'vd'} # the key is 'un' and the value is 'id' should be keep for that 'un'
>>> 
>>> [i for key, val in d.items[] for i in val if i['id']==keeps[key]]
[{'un': 'a', 'id': 'cm'}, {'un': 'c', 'id': 'vd'}, {'un': 'c', 'id': 'vd'}, {'un': 'b', 'id': 'cd'}, {'un': 'b', 'id': 'cd'}]
>>> 

Trong dòng cuối cùng [độ hiểu biết danh sách lồng nhau], chúng tôi lặp qua các mục của Dict được tổng hợp sau đó vượt qua các giá trị và giữ các mục đó trong các giá trị theo sau hoặc điều kiện là

>>> from collections import defaultdict
>>> 
>>> d = defaultdict[list]
>>> 
>>> for i in a:
...     d[i['un']].append[i]
... 
>>> d
defaultdict[, {'a': [{'un': 'a', 'id': 'cd'}, {'un': 'a', 'id': 'cm'}], 'c': [{'un': 'c', 'id': 'vd'}, {'un': 'c', 'id': 'a'}, {'un': 'c', 'id': 'vd'}], 'b': [{'un': 'b', 'id': 'cd'}, {'un': 'b', 'id': 'cd'}]}]
>>> 
>>> keeps = {'a': 'cm', 'b':'cd', 'c':'vd'} # the key is 'un' and the value is 'id' should be keep for that 'un'
>>> 
>>> [i for key, val in d.items[] for i in val if i['id']==keeps[key]]
[{'un': 'a', 'id': 'cm'}, {'un': 'c', 'id': 'vd'}, {'un': 'c', 'id': 'vd'}, {'un': 'b', 'id': 'cd'}, {'un': 'b', 'id': 'cd'}]
>>> 
2 có nghĩa là chúng tôi sẽ giữ các mục có
>>> from collections import defaultdict
>>> 
>>> d = defaultdict[list]
>>> 
>>> for i in a:
...     d[i['un']].append[i]
... 
>>> d
defaultdict[, {'a': [{'un': 'a', 'id': 'cd'}, {'un': 'a', 'id': 'cm'}], 'c': [{'un': 'c', 'id': 'vd'}, {'un': 'c', 'id': 'a'}, {'un': 'c', 'id': 'vd'}], 'b': [{'un': 'b', 'id': 'cd'}, {'un': 'b', 'id': 'cd'}]}]
>>> 
>>> keeps = {'a': 'cm', 'b':'cd', 'c':'vd'} # the key is 'un' and the value is 'id' should be keep for that 'un'
>>> 
>>> [i for key, val in d.items[] for i in val if i['id']==keeps[key]]
[{'un': 'a', 'id': 'cm'}, {'un': 'c', 'id': 'vd'}, {'un': 'c', 'id': 'vd'}, {'un': 'b', 'id': 'cd'}, {'un': 'b', 'id': 'cd'}]
>>> 
1 với các giá trị được chỉ định trong
>>> from collections import defaultdict
>>> 
>>> d = defaultdict[list]
>>> 
>>> for i in a:
...     d[i['un']].append[i]
... 
>>> d
defaultdict[, {'a': [{'un': 'a', 'id': 'cd'}, {'un': 'a', 'id': 'cm'}], 'c': [{'un': 'c', 'id': 'vd'}, {'un': 'c', 'id': 'a'}, {'un': 'c', 'id': 'vd'}], 'b': [{'un': 'b', 'id': 'cd'}, {'un': 'b', 'id': 'cd'}]}]
>>> 
>>> keeps = {'a': 'cm', 'b':'cd', 'c':'vd'} # the key is 'un' and the value is 'id' should be keep for that 'un'
>>> 
>>> [i for key, val in d.items[] for i in val if i['id']==keeps[key]]
[{'un': 'a', 'id': 'cm'}, {'un': 'c', 'id': 'vd'}, {'un': 'c', 'id': 'vd'}, {'un': 'b', 'id': 'cd'}, {'un': 'b', 'id': 'cd'}]
>>> 
4 Từ điển.

Bạn có thể gọi danh sách hiểu biết như thế này:

final_list = []
for key, val in d.items[]:
    for i in val:
        if i['id']==keeps[key]:
             final_list.append[i]

Lưu ý rằng vì việc lặp lại các toàn bộ danh sách đã được thực hiện trong C, nó rất nhanh hơn so với các vòng python thông thường và theo cách Pythonic để đi. Nhưng nếu hiệu suất không quan trọng đối với bạn, bạn có thể sử dụng phương pháp thông thường.

Trong hướng dẫn này, bạn sẽ học cách tìm và làm việc với các bản sao trong danh sách Python. Có thể làm việc hiệu quả với danh sách Python là một kỹ năng quan trọng, với danh sách được sử dụng rộng rãi như thế nào. Bởi vì danh sách Python cho phép chúng tôi lưu trữ các giá trị trùng lặp, có thể xác định, xóa và hiểu các giá trị trùng lặp là một kỹ năng hữu ích để làm chủ.you’ll learn how to find and work with duplicates in a Python list. Being able to work efficiently with Python lists is an important skill, given how widely used lists are. Because Python lists allow us to store duplicate values, being able to identify, remove, and understand duplicate values is a useful skill to master.

Đến cuối hướng dẫn này, bạn sẽ học được cách:

  • Tìm các bản sao trong một danh sách, cũng như cách đếm chúng
  • Xóa các bản sao trong danh sách Python
  • Tìm bản sao trong danh sách các từ điển và danh sách

Bắt đầu nào!

  • Cách tìm bản sao trong danh sách trong Python
  • Cách tìm bản sao trong danh sách và đếm chúng trong Python
  • Cách xóa các bản sao khỏi danh sách trong Python
  • Cách loại bỏ các bản sao trong danh sách các từ điển trong Python
  • Cách xóa các bản sao trong danh sách các danh sách trong Python
  • Sự kết luận
  • Tài nguyên bổ sung

Để tìm hiểu về các chủ đề liên quan, hãy xem các hướng dẫn dưới đây:

Python: Danh sách kết hợp - Danh sách hợp nhất [8 cách]

# Finding Duplicate Items in a Python List
numbers = [1, 2, 3, 2, 5, 3, 3, 5, 6, 3, 4, 5, 7]

duplicates = [number for number in numbers if numbers.count[number] > 1]
unique_duplicates = list[set[duplicates]]

print[unique_duplicates]

# Returns: [2, 3, 5]

Python: Số lượng xảy ra trong danh sách [6 cách]

  1. Chúng tôi đã sử dụng một danh sách hiểu để bao gồm bất kỳ mục nào tồn tại nhiều lần trong danh sách
  2. Sau đó chúng tôi đã chuyển đổi nó thành một tập hợp để xóa bất kỳ bản sao nào khỏi danh sách được lọc
  3. Cuối cùng, chúng tôi đã chuyển đổi bộ trở lại danh sách

Trong phần tiếp theo, bạn sẽ học cách tìm bản sao trong danh sách Python và đếm tần suất chúng xảy ra.

Cách tìm bản sao trong danh sách và đếm chúng trong Python

Trong phần này, bạn sẽ học cách đếm các mục trùng lặp trong danh sách Python. Điều này cho phép bạn biến một danh sách các mục thành một từ điển trong đó khóa là mục danh sách và giá trị tương ứng là số lần mục được nhân đôi.

Để thực hiện điều này, chúng tôi sẽ sử dụng lớp

>>> from collections import defaultdict
>>> 
>>> d = defaultdict[list]
>>> 
>>> for i in a:
...     d[i['un']].append[i]
... 
>>> d
defaultdict[, {'a': [{'un': 'a', 'id': 'cd'}, {'un': 'a', 'id': 'cm'}], 'c': [{'un': 'c', 'id': 'vd'}, {'un': 'c', 'id': 'a'}, {'un': 'c', 'id': 'vd'}], 'b': [{'un': 'b', 'id': 'cd'}, {'un': 'b', 'id': 'cd'}]}]
>>> 
>>> keeps = {'a': 'cm', 'b':'cd', 'c':'vd'} # the key is 'un' and the value is 'id' should be keep for that 'un'
>>> 
>>> [i for key, val in d.items[] for i in val if i['id']==keeps[key]]
[{'un': 'a', 'id': 'cm'}, {'un': 'c', 'id': 'vd'}, {'un': 'c', 'id': 'vd'}, {'un': 'b', 'id': 'cd'}, {'un': 'b', 'id': 'cd'}]
>>> 
8 từ mô -đun Bộ sưu tập. Sau đó, chúng tôi lọc từ điển kết quả của mình bằng cách hiểu từ điển. Hãy cùng xem mã và sau đó chúng tôi sẽ chia nhỏ các bước từng dòng:

# Finding Duplicate Items in a Python List and Count Them
from collections import Counter
numbers = [1, 2, 3, 2, 5, 3, 3, 5, 6, 3, 4, 5, 7]

counts = dict[Counter[numbers]]
duplicates = {key:value for key, value in counts.items[] if value > 1}
print[duplicates]

# Returns: {2: 2, 3: 4, 5: 3}

Hãy cùng phá vỡ mã này, vì nó phức tạp hơn một chút:

  1. Chúng tôi nhập lớp
    >>> from collections import defaultdict
    >>> 
    >>> d = defaultdict[list]
    >>> 
    >>> for i in a:
    ...     d[i['un']].append[i]
    ... 
    >>> d
    defaultdict[, {'a': [{'un': 'a', 'id': 'cd'}, {'un': 'a', 'id': 'cm'}], 'c': [{'un': 'c', 'id': 'vd'}, {'un': 'c', 'id': 'a'}, {'un': 'c', 'id': 'vd'}], 'b': [{'un': 'b', 'id': 'cd'}, {'un': 'b', 'id': 'cd'}]}]
    >>> 
    >>> keeps = {'a': 'cm', 'b':'cd', 'c':'vd'} # the key is 'un' and the value is 'id' should be keep for that 'un'
    >>> 
    >>> [i for key, val in d.items[] for i in val if i['id']==keeps[key]]
    [{'un': 'a', 'id': 'cm'}, {'un': 'c', 'id': 'vd'}, {'un': 'c', 'id': 'vd'}, {'un': 'b', 'id': 'cd'}, {'un': 'b', 'id': 'cd'}]
    >>> 
    
    8 từ thư viện bộ sưu tập
  2. Chúng tôi tải danh sách
    final_list = []
    for key, val in d.items[]:
        for i in val:
            if i['id']==keeps[key]:
                 final_list.append[i]
    
    0 của chúng tôi
  3. Sau đó, chúng tôi tạo một đối tượng truy cập danh sách của chúng tôi và chuyển đổi nó thành một từ điển
  4. Sau đó chúng tôi lọc từ điển của mình để xóa bất kỳ khóa nào: các cặp giá trị trong đó khóa chỉ tồn tại một thời gian

Trong phần tiếp theo, bạn sẽ học cách loại bỏ các bản sao khỏi danh sách Python.

Cách xóa các bản sao khỏi danh sách trong Python

Loại bỏ các bản sao trong danh sách Python được thực hiện dễ dàng bằng cách sử dụng hàm

>>> from collections import defaultdict
>>> 
>>> d = defaultdict[list]
>>> 
>>> for i in a:
...     d[i['un']].append[i]
... 
>>> d
defaultdict[, {'a': [{'un': 'a', 'id': 'cd'}, {'un': 'a', 'id': 'cm'}], 'c': [{'un': 'c', 'id': 'vd'}, {'un': 'c', 'id': 'a'}, {'un': 'c', 'id': 'vd'}], 'b': [{'un': 'b', 'id': 'cd'}, {'un': 'b', 'id': 'cd'}]}]
>>> 
>>> keeps = {'a': 'cm', 'b':'cd', 'c':'vd'} # the key is 'un' and the value is 'id' should be keep for that 'un'
>>> 
>>> [i for key, val in d.items[] for i in val if i['id']==keeps[key]]
[{'un': 'a', 'id': 'cm'}, {'un': 'c', 'id': 'vd'}, {'un': 'c', 'id': 'vd'}, {'un': 'b', 'id': 'cd'}, {'un': 'b', 'id': 'cd'}]
>>> 
5. Bởi vì các bộ trong Python không thể có các mục trùng lặp, khi chúng tôi chuyển đổi danh sách thành một tập hợp, nó sẽ loại bỏ bất kỳ bản sao nào trong danh sách đó. Sau đó, chúng ta có thể biến bộ trở lại thành một danh sách, sử dụng hàm
final_list = []
for key, val in d.items[]:
    for i in val:
        if i['id']==keeps[key]:
             final_list.append[i]
2.

Hãy để xem cách chúng ta có thể làm điều này trong Python:

# Remove Duplicates from a List in Python
from collections import Counter
numbers = [1, 2, 3, 2, 5, 3, 3, 5, 6, 3, 4, 5, 7]
unique = list[set[numbers]]
print[unique]

# Returns: [1, 2, 3, 4, 5, 6, 7]

Để tìm hiểu về các cách khác, bạn có thể loại bỏ các bản sao khỏi danh sách trong Python, hãy xem hướng dẫn này bao gồm nhiều cách khác nhau để thực hiện điều này! Trong phần tiếp theo, bạn sẽ học cách tìm bản sao trong danh sách các từ điển.

Cách loại bỏ các bản sao trong danh sách các từ điển trong Python

Hãy cùng xem cách chúng ta có thể loại bỏ các bản sao khỏi danh sách các từ điển trong Python. Bạn thường gặp dữ liệu từ web trong các định dạng giống như danh sách từ điển. Có thể xóa các bản sao khỏi các danh sách này là một kỹ năng quan trọng để đơn giản hóa dữ liệu của bạn.

Hãy cùng xem cách chúng ta có thể làm điều này trong Python bằng cách sử dụng một vòng lặp:

# Remove Duplicates from a List of Dictionaries
items = [{'name':'Nik'}, {'name': 'Kate'}, {'name':'James'}, {'name':'Nik'}, {'name': 'Kate'}]
unique_items = []

for item in items:
    if item not in unique_items:
        unique_items.append[item]
print[unique_items]

# Returns: [{'name': 'Nik'}, {'name': 'Kate'}, {'name': 'James'}]

Phương pháp này sẽ chỉ bao gồm các bản sao hoàn chỉnh. Điều này có nghĩa là nếu một từ điển có, giả sử, một cặp giá trị khóa bổ sung thì nó sẽ được bao gồm.

Cách xóa các bản sao trong danh sách các danh sách trong Python

Chúng ta có thể sử dụng cùng một cách tiếp cận để loại bỏ các bản sao khỏi danh sách các danh sách trong Python. Một lần nữa, cách tiếp cận này sẽ yêu cầu danh sách phải hoàn thành giống nhau để nó được coi là một bản sao. Trong trường hợp này, ngay cả các đơn đặt hàng khác nhau sẽ được coi là duy nhất.

Hãy cùng xem xét điều này trông như thế nào:

# Remove Duplicates from a List of Lists in Python
list_of_lists = [[1,2,3], [1,2], [2,3], [1,2,3], [2,3], [1,2,3,4]]
unique = []

for sublist in list_of_lists:
    if sublist not in unique:
        unique.append[sublist]

print[unique]

# Returns: [[1, 2, 3], [1, 2], [2, 3], [1, 2, 3, 4]]

Những gì chúng tôi làm ở đây là lặp qua từng người phụ trong danh sách của chúng tôi và đánh giá xem mục này có tồn tại trong danh sách duy nhất của chúng tôi hay không. Nếu nó không tồn tại [tức là, nó độc đáo cho đến nay], thì nó đã thêm vào danh sách của chúng tôi. Điều này đảm bảo rằng một mục chỉ được thêm một thời gian duy nhất vào danh sách của chúng tôi.

Sự kết luận

Trong hướng dẫn này, bạn đã học cách làm việc với các mục trùng lặp trong danh sách Python. Đầu tiên, bạn đã học cách xác định các yếu tố trùng lặp và cách đếm tần suất chúng xảy ra. Sau đó, bạn đã học cách xóa các phần tử trùng lặp khỏi danh sách bằng hàm

>>> from collections import defaultdict
>>> 
>>> d = defaultdict[list]
>>> 
>>> for i in a:
...     d[i['un']].append[i]
... 
>>> d
defaultdict[, {'a': [{'un': 'a', 'id': 'cd'}, {'un': 'a', 'id': 'cm'}], 'c': [{'un': 'c', 'id': 'vd'}, {'un': 'c', 'id': 'a'}, {'un': 'c', 'id': 'vd'}], 'b': [{'un': 'b', 'id': 'cd'}, {'un': 'b', 'id': 'cd'}]}]
>>> 
>>> keeps = {'a': 'cm', 'b':'cd', 'c':'vd'} # the key is 'un' and the value is 'id' should be keep for that 'un'
>>> 
>>> [i for key, val in d.items[] for i in val if i['id']==keeps[key]]
[{'un': 'a', 'id': 'cm'}, {'un': 'c', 'id': 'vd'}, {'un': 'c', 'id': 'vd'}, {'un': 'b', 'id': 'cd'}, {'un': 'b', 'id': 'cd'}]
>>> 
5. Từ đó, bạn đã học cách xóa các mục trùng lặp khỏi danh sách từ điển cũng như danh sách các danh sách trong Python.

Có thể làm việc với danh sách cải thiện đáng kể các kỹ năng lập trình Python của bạn. Bởi vì các cấu trúc dữ liệu này là vô cùng phổ biến, việc có thể làm việc với chúng khiến bạn trở thành một nhà phát triển tự tin và có khả năng hơn nhiều.

Để tìm hiểu thêm về lớp

>>> from collections import defaultdict
>>> 
>>> d = defaultdict[list]
>>> 
>>> for i in a:
...     d[i['un']].append[i]
... 
>>> d
defaultdict[, {'a': [{'un': 'a', 'id': 'cd'}, {'un': 'a', 'id': 'cm'}], 'c': [{'un': 'c', 'id': 'vd'}, {'un': 'c', 'id': 'a'}, {'un': 'c', 'id': 'vd'}], 'b': [{'un': 'b', 'id': 'cd'}, {'un': 'b', 'id': 'cd'}]}]
>>> 
>>> keeps = {'a': 'cm', 'b':'cd', 'c':'vd'} # the key is 'un' and the value is 'id' should be keep for that 'un'
>>> 
>>> [i for key, val in d.items[] for i in val if i['id']==keeps[key]]
[{'un': 'a', 'id': 'cm'}, {'un': 'c', 'id': 'vd'}, {'un': 'c', 'id': 'vd'}, {'un': 'b', 'id': 'cd'}, {'un': 'b', 'id': 'cd'}]
>>> 
8 từ thư viện bộ sưu tập, hãy xem tài liệu chính thức ở đây.

Tài nguyên bổ sung

Để tìm hiểu về các chủ đề liên quan, hãy xem các hướng dẫn dưới đây:

  • Python: Danh sách kết hợp - Danh sách hợp nhất [8 cách]
  • Python: Số lượng xảy ra trong danh sách [6 cách]
  • Danh sách Python khác biệt: Tìm sự khác biệt giữa 2 danh sách Python

Bài Viết Liên Quan

Chủ Đề