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:
- Criei uma lista que vai receber os dicionários únicos (unique_list).
- 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)):)
- Também seria possível utilizar o enumerate(list_with_duplicates).
- 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:]).
- 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.
- 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.
- 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!