Các phương pháp loại bỏ phần tử trùng lặp trong Python

Để xử lý dữ liệu trùng lặp trong danh sách hoặc danh sách chứa từ điển, Python cung cấp nhiều cách tiếp cận linh hoạt và hiệu quả.

Loại bỏ trùng lặp trong danh sách đơn giản

1. Duyệt danh sách bằng vòng lặp for

items = ['x', 'y', 5, 7, 7, 'x']
unique_items = []

for item in items:
    if item not in unique_items:
        unique_items.append(item)

print(unique_items)  # Kết quả: ['x', 'y', 5, 7]

2. Sử dụng list comprehension kết hợp điều kiện

items = ['x', 'y', 5, 7, 7, 'x']
result = []
[result.append(i) for i in items if i not in result]

print(result)  # Kết quả: ['x', 'y', 5, 7]

3. Chuyển đổi sang set rồi quay lại list

items = ['x', 'y', 5, 7, 7, 'x']
deduplicated = list(set(items))

print(deduplicated)  # Kết quả: [5, 7, 'y', 'x'] — thứ tự có thể thay đổi

Để giữ nguyên thứ tự ban đầu sau khi dùng set(), có thể áp dụng:

# Cách 1: Dùng sort với key
items = ['x', 'y', 5, 7, 7, 'x']
deduplicated = list(set(items))
deduplicated.sort(key=items.index)
print(deduplicated)  # Kết quả: ['x', 'y', 5, 7]

# Cách 2: Dùng sorted
items = ['x', 'y', 5, 7, 7, 'x']
deduplicated = sorted(set(items), key=items.index)
print(deduplicated)  # Kết quả: ['x', 'y', 5, 7]

4. Sử dụng từ điển để bảo toàn thứ tự

items = ['x', 'y', 5, 7, 7, 'x']
temp_dict = dict.fromkeys(items)
unique_list = list(temp_dict.keys())

print(unique_list)  # Kết quả: ['x', 'y', 5, 7]

5. Loại bỏ hoàn toàn các phần tử bị trùng (không giữ lại bản sao nào)

items = ['x', 'y', 5, 7, 7, 'x']
non_repeating = [i for i in items if items.count(i) == 1]

print(non_repeating)  # Kết quả: ['y', 5]

Xử lý trùng lặp trong danh sách chứa từ điển

Phương pháp 1: Sử dụng reduce và lambda

from functools import reduce

def remove_duplicate_dicts():
    data = [{"id": "A", "val": "100"}, {"id": "A", "val": "100"}, {"val": "100", "id": "A"}]
    merge = lambda acc, curr: acc if curr in acc else acc + [curr]
    return reduce(merge, [[]] + data)

print(remove_duplicate_dicts())  # [{'id': 'A', 'val': '100'}]

Phương pháp 2: Dùng set theo cặp key-value

data = [{"name": "Lan", "age": "20"}, {"name": "Hồng", "age": "20"}, {"name": "Lan", "age": "20"}]

def deduplicate_dict_list(input_list):
    seen = set()
    output = []
    for d in input_list:
        hashable = tuple(sorted(d.items()))
        if hashable not in seen:
            seen.add(hashable)
            output.append(d)
    return output

print(deduplicate_dict_list(data))  # Giữ lại duy nhất mỗi cấu trúc

Phương pháp 3: Sử dụng list comprehension và set

data = [{"name": "Lan", "age": "20"}, {"name": "Hồng", "age": "20"}, {"name": "Lan", "age": "20"}]

cleaned = [dict(t) for t in {tuple(sorted(d.items())) for d in data}]
print(cleaned)  # Chuyển dict → tuple → set → dict

Thẻ: python list set dictionary deduplication

Đăng vào ngày 16 tháng 6 lúc 09:32