![](/img/trans.png)
[英]How to replace a value for a key in dictionaries of a list based on another dictionary?
[英]Delete a dictionary based on the value of a key in another list of dictionaries
我有一個字典清單和一本主要字典。 詞典列表具有以下格式。 為值分配一個在程序中動態變化的變量。
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理解,但是我嘗試的所有方法都沒有用。 我將很高興有一個起點或任何指導。
這應該可以解決問題:
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]
所以它的作用是:
嘗試對其進行優化,因為它確實很粗糙。
您可以嘗試以下方法:
>>> 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
list_dict
的不同網址; main_dict["data"]
的字典d
: d["url"] not in S
。 命名注意:請嘗試根據內容而不是類型來命名變量。
list_dict
是詞典列表(我可以看到),但是我想立即知道這些詞典中的內容。 如果您接受url +標題構成頁面,則web_pages
會更好。 但是您應該指定為什么這些頁面在此列表中(例如dead_link_pages
或其他) main_dict
是一本字典(很明顯,但不是很main_dict
):像task
這樣的東西更好。 同樣,更好的規范是update_task
: update_task
, retrieve_task
update_task
page_urls
代替S
! 看看,這更具可讀性:
>>> 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'}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.