簡體   English   中英

過濾字典列表中的項目

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM