[英]Removing duplicates from a list of lists in Python using deep copy
我有一个字典列表 - list_1 = [{'account': '1234', 'email': 'abc@xyz.com'}, ... , ...] 我想删除包含重复电子邮件的条目名单。
import copy
list_2 = copy.deepcopy(list_1)
for i in mainList
for j in range(len(list_2)-1, -1, -1):
if ((list_2[j]["email"] == mainList[i])):
list_1.remove(list1[j])
这里的 MainList 是我用来比较值的电子邮件列表。 mainList 看起来像: ['abc@xyz.com', 'efg@cvb.com, ..., ...] 主要问题是 list_1 没有正确输出。 如果我使用列表、切片甚至列表理解来复制它,它就会变成空的。 最终结果应该给出 list_1,其中每个 email 只包含一个元素/列表/字典。 使用复制或深复制至少给了我一些东西。 有时我似乎也会遇到索引错误。 使用
for x in list_2:
相反,返回 list_1 只有一项。 我最接近正确答案的是在删除项目时迭代 list_1 本身,但它不是 100% 正确的。 请帮忙。
遍历您的字典列表并仅在新字典中不存在时才将每个 email 保存。
temp = dict()
list_1 = [{'account': '1234', 'email': 'abc@xyz.com'}]
for d in list_1:
if d['email'] in temp:
continue
else:
temp[d['email']] = d
final_list = list(temp.values())
好像你想删除重复的字典。 请在问题中提及重复的字典。
di = [{'account': '1234', 'email' : 'abc@xyz.com'}, {'account1': '12345',
'email1' : 'abcd@xyz.com'}, {'account': '1234', 'email' : 'abc@xyz.com'}]
s=[i for n, i in enumerate(d) if i not in di[n + 1:]]
Print(s)
这将为您提供所需的 output
[{'account1': '12345', 'email1': 'abcd@xyz.com'}, {'account': '1234', 'email':
'abc@xyz.com'}]
我觉得完成此操作的最简单方法是根据您的键创建list_1
的索引版本(字典)。
list_1 = [
{'account': '1234', 'email' : 'abc@xyz.com'},
{'account': '1234', 'email' : 'abc@xyz.com'},
{'account': '4321', 'email' : 'zzz@xyz.com'},
]
list_1_indexed = {}
for row in list_1:
list_1_indexed.setdefault(row['email'], row)
list_2 = list(list_1_indexed.values())
print(list_2)
这会给你:
[
{'account': '1234', 'email': 'abc@xyz.com'},
{'account': '4321', 'email': 'zzz@xyz.com'}
]
我不确定我会推荐它,但如果你想使用理解,你可以这样做:
list_2 = list({row['email']: row for row in list_1}.values())
请注意,第一个策略导致第一个键行获胜,而理解最后一个键行获胜。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.