我已经找到了一些方法,但不幸的是,在Dictioranies的内容方面没有。我希望这个问题不是重复的。
我的代码:
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个元素(:
{'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'}
我现在如何检查在一个学期中,一个同名的人是否只退出同一个政党一次?名称和参与方的组合可以出现,但不能出现在同一术语中。
提前谢谢!
您需要将dict
对象转换为可散列对象。一种选择是将他们的物品变成frozenset
:
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
中的Counter
(:
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)