Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何检查列表中的词典是否唯一?_Python_List_Dictionary_Compare - Fatal编程技术网

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)