如何以最Pythonic方式移除列表中对应另一列表grade为Unavailable的字典
符合Python风格的解决方案
首先,先修正示例代码里的语法问题:字典的键id和grade需要加引号,否则会被当作未定义变量报错。接下来用高效且简洁的方式实现需求:
# 修正后的示例数据 l1 = [{'id': '1', 'grade': 'A'}, {'id': '2', 'grade': 'B'}, {'id': '3', 'grade': 'A'}] l2 = [{'id': '1', 'grade': 'A'}, {'id': '2', 'grade': 'B'}, {'id': '3', 'grade': 'Unavailable'}] # 先提取l2中所有grade为'Unavailable'的id,存入集合(集合查找效率远高于列表) unavailable_ids = {item['id'] for item in l2 if item['grade'] == 'Unavailable'} # 用列表推导式过滤l1,保留id不在排除列表中的项 filtered_l1 = [item for item in l1 if item['id'] not in unavailable_ids] print(filtered_l1) # 输出: [{'id': '1', 'grade': 'A'}, {'id': '2', 'grade': 'B'}]
关键说明
- 用集合推导式生成
unavailable_ids,让后续的id匹配操作时间复杂度降到O(1),数据量越大,比直接遍历l2做匹配的效率提升越明显。 - 列表推导式是Python中处理序列过滤最符合风格的写法,代码简洁、可读性强,执行效率也优于普通循环+条件判断的写法。
内容的提问来源于stack exchange,提问作者J. Donič
相关产品推荐
相关产品推荐

