Python 如何检查列表中的词典是否唯一?
我已经找到了一些方法,但不幸的是,没有一种方法涉及到辞典的内容。我希望这个问题不是重复的 我的代码:Python 如何检查列表中的词典是否唯一?,python,list,dictionary,compare,Python,List,Dictionary,Compare,我已经找到了一些方法,但不幸的是,没有一种方法涉及到辞典的内容。我希望这个问题不是重复的 我的代码: import os import csv import glob os.chdir("/Users/x/PycharmProjects/x") listme = list() for csvs in glob.glob("*.csv"): with open(csvs, mode="r") as csvfile: csv_reader = csv.DictReade
import os
import csv
import glob
os.chdir("/Users/x/PycharmProjects/x")
listme = list()
for csvs in glob.glob("*.csv"):
with open(csvs, mode="r") as csvfile:
csv_reader = csv.DictReader(csvfile)
for row in csv_reader:
spek = {"name": row['name'], "party": row['group'], "term":row['term']}
listme.append(spek)
for element in listme:
print(element)
我的输出(大约5000个元素):
我现在如何检查在一个术语中,同名的人是否只从同一方退出一次?名称和当事人可以合并,但不在同一期限内
提前谢谢你 您需要将您的
dict
对象转换为可散列的对象。一种选择是将其项目转换为冻结集
:
s = set()
for d in listme:
frz = frozenset(d.items()) # hashable data structure
if frz in s:
print(d) # print duplicates
else:
s.add(frz)
我的尝试(使用itertools
中的计数器
):
了解如何比较字典可能会有所帮助:如果发现副本,您的解决方案中会发生什么?@madik_atma如果发现副本,则不会将其附加到新的数据列表中。这意味着,如果我添加一个else并在那里打印if!=1、他们应该打印这一行吗?@madik_atma是的,这取决于你想做什么。在变量c中,有多个重复项(1表示没有重复项)。我只想捕获可能的重复项,如果它们存在的话。因为,我现在不知道:)
s = set()
for d in listme:
frz = frozenset(d.items()) # hashable data structure
if frz in s:
print(d) # print duplicates
else:
s.add(frz)
data = [{'name': 'Erwin Stahl', 'party': 'SPD', 'term': '9'},
{'name': 'Eugen Glombig', 'party': 'SPD', 'term': '9'},
{'name': 'Eugen von der Wiesche', 'party': 'SPD', 'term': '9'},
{'name': 'Ferdinand Tillmann', 'party': 'CDU', 'term': '9'},
{'name': 'Franz Amrehn', 'party': 'CDU', 'term': '9'},
{'name': 'Franz Handlos', 'party': 'CSU', 'term': '9'},
{'name': 'Franz Heinrich Krey', 'party': 'CDU', 'term': '9'},
{'name': 'Franz Josef Conrad', 'party': 'CDU', 'term': '9'}]
from collections import Counter
# Find duplicates based on 'name', 'party', 'term' - you can edit which keys you want to search for:
c = Counter((d['name'], d['party'], d['term']) for d in data)
new_data = []
for d in data:
if c[(d['name'], d['party'], d['term'])] == 1:
new_data.append(d)
print(new_data)