python - 如何从字典中删除字典中的重复条目?

标签 python python-3.x

我的代码的目标是,我正在解析的文件中不应出现超过一个具有相同姓名和出生日期的人。

这是我在名为 ind 的字典中的字典:

{I19: {'BIRT': '13 FEB 1981', 'sex': 'M', 'id': 'I19', 'family': 'F23', 'name': 'Dick /Smith/'}}
{I32: {'BIRT': '27 MAY 1991', 'sex': 'M', 'id': 'I32', 'family': 'F16', 'name': 'Nick /Tary/'}}
{I30: {'BIRT': '3 SEP 1993', 'sex': 'F', 'id': 'I30', 'family': 'F16', 'name': 'Mary /Test/'}}
{I26: {'BIRT': '2 JUN 1983', 'sex': 'F', 'id': 'I26', 'family': 'F23', 'name': 'Jane /Smith/'}}
{I01: {'name': 'Joe /Smith/', 'family': 'F23', 'BIRT': '15 JUL 1960', 'sex': 'M', 'id': 'I01', 'DEAT': '31 DEC 2013'}}
{I07: {'BIRT': '23 SEP 1960', 'sex': 'F', 'id': 'I07', 'family': 'F23', 'name': 'Jennifer /Smith/'}}
{I19: {'BIRT': '13 FEB 1981', 'sex': 'M', 'id': 'I19', 'family': 'F23', 'name': 'Dick /Smith/'}}

我的代码应该删除 Dick Smith 的一个条目,因为有 2 个条目。

这是我到目前为止这部分的代码(尚未删除重复项):

for individual in ind:
    name1 = ind[individual]['name']
    bdate1 = ind[individual]['BIRT']
    for individual_2 in ind:
        name2 = ind[individual]['name']
        bdate2 = ind[individual]['BIRT']
        if name1 == name2 and bdate1 == bdate2:
            print("{} already exists. Removing duplicate entry.".format(name1))

但这给了我:

Dick /Smith/ already exists. Removing duplicate entry.
Dick /Smith/ already exists. Removing duplicate entry.
Dick /Smith/ already exists. Removing duplicate entry.
Dick /Smith/ already exists. Removing duplicate entry.
Dick /Smith/ already exists. Removing duplicate entry.
Dick /Smith/ already exists. Removing duplicate entry.
Nick /Tary/ already exists. Removing duplicate entry.
Nick /Tary/ already exists. Removing duplicate entry.
Nick /Tary/ already exists. Removing duplicate entry.
Nick /Tary/ already exists. Removing duplicate entry.
Nick /Tary/ already exists. Removing duplicate entry.
Nick /Tary/ already exists. Removing duplicate entry.
Mary /Test/ already exists. Removing duplicate entry.
Mary /Test/ already exists. Removing duplicate entry.
Mary /Test/ already exists. Removing duplicate entry.
Mary /Test/ already exists. Removing duplicate entry.
Mary /Test/ already exists. Removing duplicate entry.
Mary /Test/ already exists. Removing duplicate entry.
Jane /Smith/ already exists. Removing duplicate entry.
Jane /Smith/ already exists. Removing duplicate entry.
Jane /Smith/ already exists. Removing duplicate entry.
Jane /Smith/ already exists. Removing duplicate entry.
Jane /Smith/ already exists. Removing duplicate entry.
Jane /Smith/ already exists. Removing duplicate entry.
Joe /Smith/ already exists. Removing duplicate entry.
Joe /Smith/ already exists. Removing duplicate entry.
Joe /Smith/ already exists. Removing duplicate entry.
Joe /Smith/ already exists. Removing duplicate entry.
Joe /Smith/ already exists. Removing duplicate entry.
Joe /Smith/ already exists. Removing duplicate entry.
Jennifer /Smith/ already exists. Removing duplicate entry.
Jennifer /Smith/ already exists. Removing duplicate entry.
Jennifer /Smith/ already exists. Removing duplicate entry.
Jennifer /Smith/ already exists. Removing duplicate entry.
Jennifer /Smith/ already exists. Removing duplicate entry.
Jennifer /Smith/ already exists. Removing duplicate entry.

如果这个问题看起来很简单,我深表歉意 - 我对此很陌生。将不胜感激任何见解。

最佳答案

list_of_dict = [{'I19': {'BIRT': '13 FEB 1981', 'sex': 'M', 'id': 'I19', 'family': 'F23', 'name': 'Dick /Smith/'}},
     {'I32': {'BIRT': '27 MAY 1991', 'sex': 'M', 'id': 'I32', 'family': 'F16', 'name': 'Nick /Tary/'}}
,{'I30': {'BIRT': '3 SEP 1993', 'sex': 'F', 'id': 'I30', 'family': 'F16', 'name': 'Mary /Test/'}}
,{'I26': {'BIRT': '2 JUN 1983', 'sex': 'F', 'id': 'I26', 'family': 'F23', 'name': 'Jane /Smith/'}}
,{'I01': {'name': 'Joe /Smith/', 'family': 'F23', 'BIRT': '15 JUL 1960', 'sex': 'M', 'id': 'I01', 'DEAT': '31 DEC 2013'}}
,{'I07': {'BIRT': '23 SEP 1960', 'sex': 'F', 'id': 'I07', 'family': 'F23', 'name': 'Jennifer /Smith/'}}
,{'I19': {'BIRT': '13 FEB 1981', 'sex': 'M', 'id': 'I19', 'family': 'F23', 'name': 'Dick /Smith/'}}]

new_d = {v['name'] : {k : v} for d in list_of_dict for k,v in d.items()}

for v in new_d.values():
    print(v)

输出

{'I19': {'BIRT': '13 FEB 1981', 'sex': 'M', 'id': 'I19', 'family': 'F23', 'name': 'Dick /Smith/'}}
{'I32': {'BIRT': '27 MAY 1991', 'sex': 'M', 'id': 'I32', 'family': 'F16', 'name': 'Nick /Tary/'}}
{'I30': {'BIRT': '3 SEP 1993', 'sex': 'F', 'id': 'I30', 'family': 'F16', 'name': 'Mary /Test/'}}
{'I26': {'BIRT': '2 JUN 1983', 'sex': 'F', 'id': 'I26', 'family': 'F23', 'name': 'Jane /Smith/'}}
{'I01': {'name': 'Joe /Smith/', 'family': 'F23', 'BIRT': '15 JUL 1960', 'sex': 'M', 'id': 'I01', 'DEAT': '31 DEC 2013'}}
{'I07': {'BIRT': '23 SEP 1960', 'sex': 'F', 'id': 'I07', 'family': 'F23', 'name': 'Jennifer /Smith/'}}

请注意,在此实现中,仅保存姓氏以防重复

关于python - 如何从字典中删除字典中的重复条目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50900608/

相关文章:

python-3.x - 多处理 - tkinter 管道通信

python - 属性错误: 'OAndX' object has no attribute 'run'

python - 如何在 Docker 上运行的 Apache Superset 中为电子邮件报告配置 Celery Worker 和 Beat?

java - Python脚本参数化

python - 这个 Numpy 双循环的向量化

Python if-elif-else 运行时优化

python - 简单兴趣计算器中不可避免的 while 循环

python - 打印出加入 flask 的结果

python - 尝试拟合模型 python 时出现断言错误

python - 如何验证表单中的电子邮件地址域?