python - 如何根据键值结果创建新的字典列表?
问题描述
我有一个字典列表。例如,类似[{'sex':'male'}, {'sex':'male'}, {'sex':'male'}, {'sex':'female'}, {'sex':'female'}
. 想象一下,但要大得多。
我怎么能去只用男性词典制作一个新列表?它看起来像[{'sex':'male'}, {'sex':'male'}, {'sex':'male'}
解决方案
有很多方法可以做到这一点。其中之一是使用列表推导。
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
在另一个中使用时更愿意“流式传输”它们循环,其工作方式如下。过滤器的工作方式是采用一个返回True
or的函数False
。然后为每个列表项提供此功能。如果它返回 True,则该项目保留,如果它返回 False,则该项目被过滤掉。
new_list = filter(lambda item: item.get('sex') == 'male', old_list)
请注意,如果列表中的项目不是字典,则需要在调用它们之前确保它们是字典.get()
。您可以通过将条件更改为isinstance(item, dict) and item.get('sex') == 'male'
推荐阅读
- java - 如何自动右键单击jtable并选择第一个JMenu项目
- ubuntu - 此工具不支持从“宇宙”升级到“焦点”
- python - 如何理解“-input[range(target.shape[0]), target]”?
- rx-java - Vertx RxJava Operator 迭代不过滤内容
- javascript - .get 不是函数:当我获取 js 控制器的输入值时,我遇到了错误
- javascript - JSHint 警告:在引用外部范围变量的循环中声明的函数可能会导致语义混淆。(文件,读者)
- android - 如何在 ionic 5 中播放内部存储器中的视频?
- javascript - 不允许函数在执行后的一段时间内执行
- react-native - React 本机纸质复选框设计不起作用,不可见,涟漪效应有效
- java - Spring Boot,Hibernate,Hikari,SQLite 无法从连接池获取 JDBC 连接