[英]Filtering items in a list in a dictionary
在 Python 中,我希望編輯字典列表,以便它們在每個字典中都具有相同的對應項目。
例如,這就是我最初在字典列表中的內容:
[{'name': 'clock'}, {'name': 'hours'}, {'name': 'nosotros'},
{'name': 'pinkfloyd'}, {'name': 'time'}, {'name': 'alarm clock', 'accuracy': 0.9196},
{'name': 'analogue', 'accuracy': 0.96998}, {'name': 'clock', 'accuracy': 0.99748}]
我想要的是只有具有相應“名稱”的詞典,但刪除所有“准確度”實例。 基本上,我希望返回以下內容:
[{'name': 'clock'}, {'name': 'hours'}, {'name': 'nosotros'},
{'name': 'pinkfloyd'}, {'name': 'time'}, {'name': 'alarm clock'},
{'name': 'analogue'}, {'name': 'clock'}]
請幫助指導我如何做到這一點!
使用列表理解:
dl = [{'name': 'clock'}, {'name': 'hours'}, {'name': 'nosotros'},
{'name': 'pinkfloyd'}, {'name': 'time'}, {'name': 'alarm clock', 'accuracy': 0.9196},
{'name': 'analogue', 'accuracy': 0.96998}, {'name': 'clock', 'accuracy': 0.99748}]
nl = [{'name': x['name']} for x in dl]
print(nl)
如果您想以一般方式執行此操作,您可以獲取字典中鍵的交集,然后基於這些鍵構建一個新列表:
list_o_dicts = [
{'name': 'clock'}, {'name': 'hours'}, {'name': 'nosotros'},
{'name': 'pinkfloyd'}, {'name': 'time'}, {'name': 'alarm clock', 'accuracy': 0.9196},
{'name': 'analogue', 'accuracy': 0.96998}, {'name': 'clock', 'accuracy': 0.99748}
]
common_keys = set.intersection(*map(set, list_o_dicts)) # just {'name'}
output = [{k:d[k] for k in common_keys} for d in list_o_dicts]
輸出:
[{'name': 'clock'},
{'name': 'hours'},
{'name': 'nosotros'},
{'name': 'pinkfloyd'},
{'name': 'time'},
{'name': 'alarm clock'},
{'name': 'analogue'},
{'name': 'clock'}]
如果您有多個公用鍵,這仍然有效:
list_o_dicts = [
{'name': 'alarm clock', 'accuracy': 0.9196},
{'name': 'analogue', 'accuracy': 0.96998},
{'name': 'clock', 'accuracy': 0.99748}
]
common_keys = set.intersection(*map(set, list_o_dicts)) # {'accuracy', 'name'}
[{k:d[k] for k in common_keys} for d in list_o_dicts]
出去:
[{'accuracy': 0.9196, 'name': 'alarm clock'},
{'accuracy': 0.96998, 'name': 'analogue'},
{'accuracy': 0.99748, 'name': 'clock'}]
in_list = [{'name': 'clock'}, {'name': 'hours'}, {'name': 'nosotros'},
{'name': 'pinkfloyd'}, {'name': 'time'}, {'name': 'alarm clock', 'accuracy': 0.9196},
{'name': 'analogue', 'accuracy': 0.96998}, {'name': 'clock', 'accuracy': 0.99748}]
new_list = [{k: v for k,v in ele.items() if k == 'name'} for ele in in_list]
print(new_list)
輸出:
[{'name': 'clock'}, {'name': 'hours'}, {'name': 'nosotros'}, {'name': 'pinkfloyd'}, {'name': 'time'}, {'name': 'alarm clock'}, {'name': 'analogue'}, {'name': 'clock'}]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.