简体   繁体   English

过滤字典列表中的项目

[英]Filtering items in a list in a dictionary

In Python, I'm looking to edit a list of dictionaries so that they all have the same corresponding items in each dictionary.在 Python 中,我希望编辑字典列表,以便它们在每个字典中都具有相同的对应项目。

For example, this is what I originally have in my list of dictionaries:例如,这就是我最初在字典列表中的内容:

[{'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}]

What I would like is to only have dictionaries with the corresponding 'name' but all instances of 'accuracy' removed.我想要的是只有具有相应“名称”的词典,但删除所有“准确度”实例。 Basically, I want the following returned:基本上,我希望返回以下内容:

[{'name': 'clock'}, {'name': 'hours'}, {'name': 'nosotros'}, 
{'name': 'pinkfloyd'}, {'name': 'time'}, {'name': 'alarm clock'}, 
{'name': 'analogue'}, {'name': 'clock'}]

Please help guide me on how to do this!请帮助指导我如何做到这一点!

Using a list comprehension:使用列表理解:

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)

If you want to do this in a general way, you can take the intersection of the keys your dictionaries and then build a new list based on those keys:如果您想以一般方式执行此操作,您可以获取字典中键的交集,然后基于这些键构建一个新列表:

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]

output:输出:

[{'name': 'clock'},
 {'name': 'hours'},
 {'name': 'nosotros'},
 {'name': 'pinkfloyd'},
 {'name': 'time'},
 {'name': 'alarm clock'},
 {'name': 'analogue'},
 {'name': 'clock'}]

If you had more than one common key this still works:如果您有多个公用键,这仍然有效:

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]

out:出去:

[{'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)

Output:输出:

[{'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