首页 > 解决方案 > 如何根据键值结果创建新的字典列表?

问题描述

我有一个字典列表。例如,类似[{'sex':'male'}, {'sex':'male'}, {'sex':'male'}, {'sex':'female'}, {'sex':'female'}. 想象一下,但要大得多。

我怎么能去只用男性词典制作一个新列表?它看起来像[{'sex':'male'}, {'sex':'male'}, {'sex':'male'}

标签: python

解决方案


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

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_list在另一个中使用时更愿意“流式传输”它们循环,其工作方式如下。过滤器的工作方式是采用一个返回Trueor的函数False。然后为每个列表项提供此功能。如果它返回 True,则该项目保留,如果它返回 False,则该项目被过滤掉。

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

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


推荐阅读