Removendo itens duplicados de uma lista de dicionários. (Python)

Removendo itens duplicados de uma lista de dicionários. (Python)

Overview

Olá! Bem-vindo a um guia divertido, porém sério, sobre como lidar com itens duplicados em listas de dicionários no Python. Neste post, vamos mergulhar em duas formas práticas, desde a abordagem básica até o uso sofisticado de list comprehension. Prepare-se para descobrir truques eficazes que vão limpar suas listas e otimizar seus dados para o sucesso!

Neste post, mostro como remover itens duplicados de uma lista de dicionários de duas formas.

Antes de começar, é bom lembrar que o Python considera dois dicionários como iguais se eles possuírem as mesmas propriedades e os mesmos valores, independente da ordem das propriedades.

Exemplo:

>>> {"a":42, "b": "foo"} == {"b": "foo", "a": 42}
True

Para as duas formas, considere a variável e a lista abaixo:

list_with_duplicates = [
    {"foo": 42, "bar": "bacon", "age": 100, "need_food": True},
    {"foo": 42, "bar": "bacon", "age": 100, "need_food": True},
    {"foo": 20, "bar": "bacon", "age": 50, "need_food": True}
]

Nesta lista, os dois primeiros itens são iguais e o último é diferente.

Forma 1: Básica.

unique_list = list()
for i in range(len(list_with_duplicates)):
    if list_with_duplicates[i] not in list_with_duplicates[i + 1:]:
        unique_list.append(list_with_duplicates[i])


for unique_result in unique_list:
    print(unique_result)

O que acontece no código acima é o seguinte:

  1. Criei uma lista que vai receber os dicionários únicos (unique_list).
  2. Para preencher esta lista, faço um loop com a quantidade de elementos que existem na lista geral com os elementos (for i in range(len(list_with_duplicates)):)
    1. Também seria possível utilizar o enumerate(list_with_duplicates).
  3. Dentro deste loop, verifico que se o elemento atual (list_with_duplicates[i]) não está dentro da lista a partir da posição adjacente (not in list_with_duplicates[i + 1:]).
  4. Se não estiver, então o valor é único e eu o adiciono na lista unique_list.

Forma 2: Usando list comprehension

unique_list = [i for n, i in enumerate(list_with_duplicates) if i not in list_with_duplicates[n + 1:]]

for unique_result in unique_list:
    print(unique_result)

Nesta segunda forma, fiz exatamente a mesma coisa da primeira forma, mas utilizando list comprehension.

  1. i for n, i in enumerate(list_with_duplicates): Neste pedaço do código, a variável n indica o índice do elemento que está sendo utilizado, enquanto i representa o item em si.
  2. if i not in list_with_duplicates[n + 1:]: Agora verificamos se o item sendo analisado existe nas posições adjacentes da lista.

Criei um arquivo no meu Github com este exemplo.

Espero ter ajudado!