python-3.x - 比较两个字典列表,如果键和值存在,则从列表中删除字典
问题描述
基于以下两个字典列表,如何根据 list2 中的 key("name") 和 value 删除 list1 中的字典?
list1 = [{'name':'john','age':'12','gender':'male'},
{'name':'sam', 'age':'11','gender':'male'},
{'name':'tom', 'age':'12','gender':'male'},
{'name':'elsa','age':'14','gender':'female'},
{'name':'juhi','age':'13','gender':'female'}]
list2 =
[{'name':'tom','gender':'male','status':1,'subject':'english'},
{'name':'elsa','gender':'female','status':0,'subject':'english'}]
Expected_list = [{'name':'john','age':'12','gender':'male'},
{'name':'sam', 'age':'11','gender':'male'},
{'name':'juhi','age':'13','gender':'female'}]
解决方案
您可以使用set
来形成要删除的名称。然后过滤你的第一个列表。
使用推导:
names = {x['name'] for x in list2}
expected_list = [x for x in list1 if x['name'] not in names]
使用函数式风格:
names = set(map(lambda x: x['name'], list2))
expected_list = list(filter(lambda x: x['name'] not in names, list1))
推荐阅读
- twilio - 如何在不丢失原始参与者的情况下将现有呼叫升级到会议?
- sap - 如何在 SAP dreamweaver 的 MDXTEST 中使用 MDX 函数
- python - pyqt5图表上的缩放和滚动条
- javascript - when I used tab bar in bootstrap I can't return to first bar or others bar
- python - Python 导入错误:没有命名模块
- javascript - Call two actions inside onClick in React
- java - 使用 Angular 应用程序作为静态资源的 Spring Boot 战争部署
- c# - 数据在列表中时的事件处理程序
- mysql - 从 mysql 数据库查询密码哈希返回十进制数字的缓冲区数组而不是字符串
- sql - 将 sql 文件拖放到 bcp 命令中提到的网络共享