Python 根据另一个字典列表中键的值删除字典

Python 根据另一个字典列表中键的值删除字典,python,python-2.7,dictionary,dictionary-comprehension,Python,Python 2.7,Dictionary,Dictionary Comprehension,我有一份字典清单和一本主字典。 字典列表的格式如下。为值分配一个在程序中动态变化的变量 list_dict = [{'url': url_value , 'title' : title_value}, {'url': url_value , 'title' : title_value}] main_dict = {"execution_time": "2017-06-05", "target_url": "http://www.bloomberg.com", "data": [{ "url"

我有一份字典清单和一本主字典。 字典列表的格式如下。为值分配一个在程序中动态变化的变量

list_dict = [{'url': url_value , 'title' : title_value}, {'url': url_value , 'title' : title_value}]

main_dict = {"execution_time": "2017-06-05", "target_url": "http://www.bloomberg.com", "data": [{ "url" : url1}, { "url" : url2}], "name": "Michael", "occupation": "software"}
如果主目录中数据下的任何url值(url1或url2)与列表目录中任何词典中的url值相同,我想从数据中删除该词典

输出:假设url_值为url1,则:

main_dict = {"execution_time": "2017-06-05", "target_url": "http://www.bloomberg.com", "data": [{ "url" : url2}], "name": "Michael", "occupation": "software"}

我曾想过使用听写理解法,但我尝试的一切都不起作用。我希望有一个起点或任何指导。

这应该可以做到:

my_list = [list_dict_data['url'] for list_dict_data in list_dict]
delete_list = []

for i in range(len(main_dict['data'])):
  if main_dict['data'][i]['url'] in my_list:
    delete_list.append(i)

for i in delete_list:
  del main_dict['data'][i]
因此,它所做的是:

  • 列出要从列表中检查的所有URL
  • 遍历main dict中的所有URL,并将其与list_dict中的数据进行比较
  • 将索引添加到删除列表中
  • 遍历删除列表并删除主目录中的相应索引
  • 尽管如此,请尝试对其进行优化,因为它非常粗糙。

    您可以尝试以下方法:

    >>> list_dict = [{'url': "url1" , 'title' : "title_value1"}, {'url': "other_url" , 'title' : "title_value2"}]
    >>> main_dict = {"execution_time": "2017-06-05", "target_url": "http://www.bloomberg.com", "data": [{ "url" : "url1"}, { "url" : "url2"}], "name": "Michael", "occupation": "software"}
    >>> S = set(d["url"] for d in list_dict)
    >>> main_dict["data"] = [d for d in main_dict["data"] if d["url"] not in S]
    >>> main_dict
    {'execution_time': '2017-06-05', 'target_url': 'http://www.bloomberg.com', 'data': [{'url': 'url2'}], 'name': 'Michael', 'occupation': 'software'}
    
    与其删除
    main_dict[“data”]
    的元素,不如在不匹配URL的情况下重新创建列表:

    • S
      中提取
      列表的不同URL
      
    • main_dict[“data”]
      中过滤dict
      d
      ,规则为:
      d[“url”]不在S
    命名注意:尝试根据内容而不是类型命名变量

    • list\u dict
      是一个字典列表(我可以看到),但我想马上知道那些字典里有什么<代码>网页
      会更好,如果你接受一个url+一个标题组成一个页面。但是,您应该指定这些页面出现在此列表中的原因(例如,
      死链接页面
      ,或其他任何内容)
    • main_dict
      是一本字典(非常明显,但不是真正的信息):类似于
      task
      的东西更好。同样,一个更好的规范是信息性的:
      update\u task
      retrieve\u task
    • 好的,我将
      S
      替换为
      page\u url
    看一看,这更具可读性:

    >>> web_pages = [{'url': "url1" , 'title' : "title_value1"}, {'url': "other_url" , 'title' : "title_value2"}]
    >>> task = {"execution_time": "2017-06-05", "target_url": "http://www.bloomberg.com", "data": [{ "url" : "url1"}, { "url" : "url2"}], "name": "Michael", "occupation": "software"}
    >>> page_urls = set(p["url"] for p in web_pages)
    >>> task["data"] = [t for t in task["data"] if t["url"] not in page_urls]
    >>> task
    {'execution_time': '2017-06-05', 'target_url': 'http://www.bloomberg.com', 'data': [{'url': 'url2'}], 'name': 'Michael', 'occupation': 'software'}