【问题标题】:Delete a dictionary based on the value of a key in another list of dictionaries根据另一个字典列表中的键值删除字典
【发布时间】:2017-11-06 21:09:36
【问题描述】:

我有一个字典列表和一个主字典。 字典列表具有以下格式。值被分配一个在程序中动态变化的变量。

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

如果 main_dict 中数据下的任何 url 值(url1 或 url2)与 list_dict 中任何字典中的 url_value 值相同,我想从数据中删除该字典。

输出:假设 url_value 是 url1 那么:

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

我考虑过使用 dict 理解,但是我尝试的所有方法都不起作用。我将不胜感激起点或任何指导。

【问题讨论】:

    标签: python python-2.7 dictionary dictionary-comprehension


    【解决方案1】:

    你可以试试这个:

    >>> 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"] 的元素,而是重新创建没有匹配网址的列表:

    • 提取S中list_dict的不同url;
    • 根据规则过滤d 中的字典main_dict["data"]:d["url"] not in S。

    命名注意事项:尽量根据内容而不是类型来命名你的变量。

    • list_dict 是一个字典列表(我可以看到),但我想立即知道这些字典中有什么。 web_pages 会更好,如果您接受 url + 标题构成页面。但您应该说明这些页面为何在此列表中(例如dead_link_pages 或其他)
    • main_dict 是一本字典(非常明显,信息量不大):像 task 这样的东西更好。同样,一个更好的规范是信息丰富的:update_task, retrieve_task, ?
    • 好的,我将S 替换为page_urls!

    看看,这更易读:

    >>> 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'}
    

    【讨论】:

      猜你喜欢
      • 2021-07-13
      • 1970-01-01
      • 1970-01-01
      • 2017-07-29
      • 1970-01-01
      • 2020-10-20
      • 2018-10-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多