从嵌套词典列表中删除重复的值

时间:2019-04-18 10:16:01

标签: python python-3.x dictionary nested

我有带有嵌套结构的词典列表。我需要删除所有重复的值。我是Python的新手,无法解决此任务。有人可以帮助我吗?

我的列表如下:

m_chart->legend()->update();

我只需要设置一次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"
         },
         {  
            "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"
         }
      ]
   }
]

3 个答案:

答案 0 :(得分:4)

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)

答案 1 :(得分:0)

您可以使用列表理解:

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"
        }
     ]
   }
]

答案 2 :(得分:-1)

 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)

尝试这些