繁体   English   中英

如何从 python 中的字典列表中删除重复项

[英]How to remove duplicates from list of dictionaries in python

我有 2 个具有相同值的字典列表。 我想删除 1 个值。

这是它的外观:

[
{
  "activity_name": "Wait Time",
  "task_detail": [
    {
      "created_date": "2021-04-29 10:00:25.695254",
      "row_id": ""
    }
  ]
},
{
  "activity_name": "Wait Time",
  "task_detail": [
    {
      "created_date": "2021-04-29 10:28:42.131017",
      "row_id": ""
    }
  ]
}
]

这是我的代码:

result=[]
for gc_item in gc_response['Items']:
    for sch_act in gc_item['scheduled_activity']:
        result.append(sch_act)

如何为此删除重复值? 在 Scheduled_activity 只有我有值(活动名称和 task_detail)

我需要删除 1 个重复值。 output 应该是:

{
  "activity_name": "Wait Time",
  "task_detail": [
    {
      "created_date": "2021-04-29 10:28:42.131017",
      "row_id": ""
    }
  ]
}

仅当列表中尚不存在 activity_name 时才能添加

result=[]
acitivity_names_added = []
for sch_act in gc_item['scheduled_activity']:
    if(sch_act['activity_name'] not in acitivity_names_added):
        result.append(sch_act) 
        acitivity_names_added.append(sch_act['activity_name'])

如果要保留最后一个而不是第一个,则以相反的顺序遍历此循环

result=[]
acitivity_names_added = []
for sch_act in gc_item['scheduled_activity'][::-1]:
    if(sch_act['activity_name'] not in acitivity_names_added):
        result.append(sch_act) 
        acitivity_names_added.append(sch_act['activity_name'])

这类似于Remove duplicate dict in list in Python

在您的情况下, task_detail似乎更复杂,因此像[dict(t) for t in {tuple(d.items()) for d in l}]这样的简单元组方法可能不起作用,但您可以尝试json 方法在同一线程中:

import json

result = []
for gc_item in gc_response['Items']:
    set_of_jsons = {json.dumps(d, sort_keys=True) for d in gc_item['scheduled_activity']}
    result += [json.loads(t) for t in set_of_jsons]

它基本上将 list/dict 转换为字符串,以便您可以按集合删除重复项。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM