从 Python 中的字典列表中删除重复项

目录

Remove duplicates from list of dictionaries in Python

  1. 从 Python 中的字典列表中删除重复项
  2. 使用 for 循环从字典列表中删除重复项
  3. 使用 enumerate() 从字典列表中删除重复项
  4. 使用熊猫从字典列表中删除重复项

从 Python 中的字典列表中删除重复项

要从字典列表中删除重复项:

  1. 使用字典理解来遍历列表。
  2. 使用每个属性的值id作为键,使用字典作为值。
  3. 使用该dict.values()方法只获取唯一的字典。
  4. 使用该类list()将结果转换为列表。
主程序
list_of_dictionaries = [ {'id': 1, 'site': 'bobbyhadz.com'}, {'id': 2, 'site': 'google.com'}, {'id': 1, 'site': 'bobbyhadz.com'}, ] result = list( { dictionary['id']: dictionary for dictionary in list_of_dictionaries }.values() ) # 👇️ [{'id': 1, 'site': 'bobbyhadz.com'}, {'id': 2, 'site': 'google.com'}] print(result)

我们使用字典理解来遍历字典列表。

Dict comprehensions 与list comprehensions非常相似

他们对字典中的每个键值对执行一些操作,或者选择满足条件的键值对的子集。

在每次迭代中,我们将当前的值设置id为键,将实际字典设置为值。

字典中的键是唯一的,所以任何重复的值都会被过滤掉。

然后我们使用该dict.values()方法只返回唯一的字典。

dict.values方法返回字典值的新视图

主程序
my_dict = {'id': 1, 'name': 'bobbyhadz'} print(my_dict.values()) # 👉️ dict_values([1, 'bobbyhadz'])

最后一步是使用该类list()将视图对象转换为包含唯一字典的列表。

列表接受一个可迭代对象并返回一个列表对象。

这是完整的代码片段。

主程序
list_of_dictionaries = [ {'id': 1, 'site': 'bobbyhadz.com'}, {'id': 2, 'site': 'google.com'}, {'id': 1, 'site': 'bobbyhadz.com'}, ] result = list( { dictionary['id']: dictionary for dictionary in list_of_dictionaries }.values() ) # 👇️ [{'id': 1, 'site': 'bobbyhadz.com'}, {'id': 2, 'site': 'google.com'}] print(result)

for使用循环从字典列表中删除重复项

这是一个三步过程:

  1. 声明一个存储空列表的新变量。
  2. 使用for循环遍历字典列表。
  3. 使用list.append()方法将
    唯一词典添加到新列表中
主程序
list_of_dictionaries = [ {'id': 1, 'site': 'bobbyhadz.com'}, {'id': 2, 'site': 'google.com'}, {'id': 1, 'site': 'bobbyhadz.com'}, ] new_list = [] for dictionary in list_of_dictionaries: if dictionary not in new_list: new_list.append(dictionary) # 👇️ [{'id': 1, 'site': 'bobbyhadz.com'}, {'id': 2, 'site': 'google.com'}] print(new_list)

我们使用for 循环遍历字典列表。

在每次迭代中,我们使用not in运算符检查字典是否不存在于新列表中。

如果满足条件,我们使用该list.append()方法将字典附加到列表中。

The in operator tests
for membership. For example, x in l evaluates to True if x is a member of
l, otherwise, it evaluates to False.

x not in l returns the negation of x in l.

The list.append() method
adds an item to the end of the list.

main.py
my_list = ['bobby', 'hadz'] my_list.append('com') print(my_list) # 👉️ ['bobby', 'hadz', 'com']

# Remove duplicates from a List of Dictionaries using enumerate()

You can also use the enumerate() function to remove the duplicates from a list
of dictionaries.

main.py
list_of_dictionaries = [ {'id': 1, 'site': 'bobbyhadz.com'}, {'id': 2, 'site': 'google.com'}, {'id': 1, 'site': 'bobbyhadz.com'}, ] new_list = [ dictionary for index, dictionary in enumerate(list_of_dictionaries) if dictionary not in list_of_dictionaries[index + 1:] ] # 👇️ [{'id': 2, 'site': 'google.com'}, # {'id': 1, 'site': 'bobbyhadz.com'}] print(new_list)

The enumerate function takes an iterable and
returns an enumerate object containing tuples where the first element is the
index and the second is the corresponding item.

On each iteration, we check if the dictionary is not contained in the remainder
of the list.

Notice that we used a list slice that starts at the next index.

If the dictionary is not contained in the remainder of the list, then it’s not a
duplicate.

# Remove duplicates from a List of Dictionaries using pandas

If you use the pandas module, you can also convert the dictionary to a
DataFrame and drop the duplicates.

Make sure you have pandas installed to
run the code sample.

shell
pip install pandas # 👇️ or with pip3 pip3 install pandas

Now, pass the list of dictionaries to the
DataFrame
class.

main.py
import pandas as pd list_of_dictionaries = [ {'id': 1, 'site': 'bobbyhadz.com'}, {'id': 2, 'site': 'google.com'}, {'id': 1, 'site': 'bobbyhadz.com'}, ] new_list = pd.DataFrame( list_of_dictionaries ).drop_duplicates().to_dict('records') # [{'id': 1, 'site': 'bobbyhadz.com'}, # {'id': 2, 'site': 'google.com'}] print(new_list)

The
drop_duplicates
method returns the DataFrame with the duplicates removed.

The
to_dict
method converts the DataFrame object to a dictionary.

我还写了一篇关于
如何从字典列表中删除字典的详细文章。

额外资源

您可以通过查看以下教程来了解有关相关主题的更多信息: