【问题标题】:Remove duplicate values from list of nested dictionaries从嵌套字典列表中删除重复值
【发布时间】:2019-09-08 15:58:48
【问题描述】:

我有嵌套结构的字典列表。我需要删除所有重复的值。我是 Python 的新手,无法解决这个任务。谁能帮帮我?

我的列表如下:

[  
   {  
      "task_id":123,
      "results":[  
         {  
            "url":"site.com",
            "date":"04.18.2019"
         },
         {  
            "url":"another_site.com",
            "date":"04.18.2019"
         },
         {  
            "url":"site1.com",
            "date":"04.18.2019"
         }
      ]
   },
   {  
      "task_id":456,
      "results":[  
         {  
            "url":"site3.com",
            "date":"04.18.2019"
         },
         {  
            "url":"site.com",
            "date":"04.18.2019"
         }
      ]
   },
   {  
      "task_id":789,
      "results":[  
         {  
            "url":"site7.com",
            "date":"04.18.2019"
         },
         {  
            "url":"site9.com",
            "date":"04.18.2019"
         },
         {  
            "url":"site.com",
            "date":"04.18.2019"
         }
      ]
   }
]

我只需要设置 site.com 一次。如果 url 的任何值重复 - 从 dict 中排除它。

结果: 任务 123,结果中有 3 个字典 任务 456,结果中有 1 个字典(不包括 site.com) 任务 789,结果中有 2 个字典(不包括 site.com)

所需的输出应如下所示:

[  
   {  
      "task_id":123,
      "results":[  
         {  
            "url":"site.com",
            "date":"04.18.2019"
         },
         {  
            "url":"another_site.com",
            "date":"04.18.2019"
         },
         {  
            "url":"site1.com",
            "date":"04.18.2019"
         }
      ]
   },
   {  
      "task_id":456,
      "results":[  
         {  
            "url":"site3.com",
            "date":"04.18.2019"
         }
      ]
   },
   {  
      "task_id":789,
      "results":[  
         {  
            "url":"site7.com",
            "date":"04.18.2019"
         },
         {  
            "url":"site9.com",
            "date":"04.18.2019"
         }
      ]
   }
]

【问题讨论】:

  • url 有不同的键,你能添加一个想要的输出吗?
  • 您的嵌套值是递归的(即树的可变深度,因此 dict 可以包含 dict 数组等)还是恒定深度?
  • @FindOutIslamNow 深度不变

标签: python python-3.x dictionary nested


【解决方案1】:

results 成为你的数组。

u = set()
final = []
for dict in results:
   for res in dict["results"]:
      if res["url"] not in u:
         u.add(res["url"])
         final.append(res)
print(final)

【讨论】:

  • @NatalyFirstova 如果有帮助,您可以接受答案!
  • @findoutislamnow 你能把从开始导入到打印的整个内容发布出来
  • @mohan111 这不需要任何导入。只需在数组检索后粘贴此代码即可。
  • 我在该数组检索时遇到错误,您能否正确地发帖给我,因为我是 python 的新手 @FindOutIslamNow
  • @mohan111 从问题中取出数组 copy-paste e.g. results = [.. paste here,然后粘贴答案代码
【解决方案2】:

您可以使用列表推导:

d = [{'task_id': 123, 'results': [{'url': 'site.com', 'date': '04.18.2019'}, {'url': 'another_site.com', 'date': '04.18.2019'}, {'url': 'site1.com', 'date': '04.18.2019'}]}, {'task_id': 456, 'results': [{'url': 'site3.com', 'date': '04.18.2019'}, {'url': 'site.com', 'date': '04.18.2019'}]}, {'task_id': 789, 'results': [{'url': 'site7.com', 'date': '04.18.2019'}, {'url': 'site9.com', 'date': '04.18.2019'}, {'url': 'site.com', 'date': '04.18.2019'}]}]
new_d = [{**a, 'results':[c for c in a['results'] if all(c not in b['results'] for b in d[:i])]} for i, a in enumerate(d)]

输出:

[
  {
    "task_id": 123,
    "results": [
        {
            "url": "site.com",
            "date": "04.18.2019"
        },
        {
            "url": "another_site.com",
            "date": "04.18.2019"
        },
        {
            "url": "site1.com",
            "date": "04.18.2019"
        }
    ]
},
{
    "task_id": 456,
    "results": [
        {
            "url": "site3.com",
            "date": "04.18.2019"
        }
    ]
},
{
    "task_id": 789,
    "results": [
        {
            "url": "site7.com",
            "date": "04.18.2019"
        },
        {
            "url": "site9.com",
            "date": "04.18.2019"
        }
     ]
   }
]

【讨论】:

    【解决方案3】:
     people = {
              1: {'name': 'John',},
                  2: {'name': 'Marie'},
              3: {'name': 'Ann',},
              4: {'name': 'John'},
         }
    print(people)
    unique = {}
    for key, value in people.items(): 
           if value not in unique.values(): 
              unique[key] = value
    print(unique)
    

    试试这些

    【讨论】:

    • 这并不能解决所述问题。请仔细阅读问题中发布的问题。
    猜你喜欢
    • 2018-04-14
    • 1970-01-01
    • 2021-02-23
    • 2014-01-28
    • 1970-01-01
    • 1970-01-01
    • 2021-12-08
    • 1970-01-01
    • 2016-10-19
    相关资源
    最近更新 更多