Python 如何基于键值结果创建新的词典列表?

Python 如何基于键值结果创建新的词典列表?,python,Python,我有一份字典清单。例如,类似于[{'sex':'male'},{'sex':'male'},{'sex':'male'},{'sex':'female'},{'sex':'female'}的东西。想象一下,但要大得多 我怎样才能只使用男性词典来列出一个新的列表呢?它看起来像[{'sex':'male'},{'sex':'male'},{'sex':'male'}这对于一个: dict_list_1=[{'sex':'male'},{'sex':'male'},{'sex':'male'},{'s

我有一份字典清单。例如,类似于
[{'sex':'male'},{'sex':'male'},{'sex':'male'},{'sex':'female'},{'sex':'female'}
的东西。想象一下,但要大得多

我怎样才能只使用男性词典来列出一个新的列表呢?它看起来像
[{'sex':'male'},{'sex':'male'},{'sex':'male'}

这对于一个:

dict_list_1=[{'sex':'male'},{'sex':'male'},{'sex':'male'},{'sex':'female'},{'sex':'female'}]
dic_列表_2=[如果dic['sex']=='male'],则dic列表_1中dic的dic为dic]

有很多方法可以做到这一点。其中之一是使用列表理解

old_list = [{'sex':'male'}, {'sex':'male'}, {'sex':'male'}, {'sex':'female'}, {'sex':'female'}]

new_list = [item for item in old_list if item.get('sex') == 'male']
然而,如果您的原始列表中有1000万个字典,Python将在继续处理其他内容之前检查1000万个条目

另一种方法是使用过滤器,如果您的列表中有大量的字典,那么这个过滤器会更好,因为它不会一次处理所有字典,而是一种“流”当您在另一个循环中使用
new\u list
时,其工作方式如下。过滤器的工作方式是使用一个函数,该函数返回
True
False
。然后为每个列表项提供该函数。如果该函数返回True,则该项保留,如果该函数返回False,则该项被过滤掉

new_list = filter(lambda item: item.get('sex') == 'male', old_list)

请注意,如果列表中的项不是字典,则在对它们调用
.get()
之前,需要确保它们是字典。可以通过将条件更改为
isinstance(item,dict)和item.get('sex')来完成此操作=='male'

您确定这是您可以使用的最佳数据结构吗?您可以向我们提供更多详细信息吗?在您的案例中,每个dict有多少个值?
new_list = filter(lambda item: item.get('sex') == 'male', old_list)