首页 > 解决方案 > 如何检查列表中的字典是否唯一?

问题描述

我找到了一些方法,但不幸的是,没有找到关于字典内容的方法。我希望这个问题不是重复的。

我的代码:

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'}

我现在如何检查一个术语中,同名的人是否只从同一方退出一次?名称和政党组合可能会出现,但不会出现在同一个词中。

先感谢您!

标签: pythonlistdictionarycompare

解决方案


你需要把你的dict对象变成 sth 可散列的。一种选择是将他们的项目变成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)

推荐阅读