目录
Remove duplicates from list of dictionaries in Python
从 Python 中的字典列表中删除重复项
要从字典列表中删除重复项:
- 使用字典理解来遍历列表。
- 使用每个属性的值
id
作为键,使用字典作为值。 - 使用该
dict.values()
方法只获取唯一的字典。 - 使用该类
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
使用循环从字典列表中删除重复项
这是一个三步过程:
- 声明一个存储空列表的新变量。
- 使用
for
循环遍历字典列表。 - 使用
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.
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.
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.
pip install pandas # 👇️ or with pip3 pip3 install pandas
Now, pass the list of dictionaries to the
DataFrame
class.
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.
我还写了一篇关于
如何从字典列表中删除字典的详细文章。
额外资源
您可以通过查看以下教程来了解有关相关主题的更多信息: