如何用Python内置库过滤字典列表,保留唯一名称最低分条目
问题:过滤字典列表,保留每个唯一
name对应score最低的条目 给定如下字典列表:
[{"score":-10, "name": "Tom", "etc": 1}, {"score":-20, "name": "Tom", "etc": 2}, {"score":-110, "name": "Jerry", "etc": 3}, {"score":-210, "name": "Jerry", "etc": 5}]
需要过滤列表,让每个唯一的name仅保留score最低的条目,期望结果为:
[ {"score":-20, "name": "Tom", "etc": 2}, {"score":-210, "name": "Jerry", "etc": 5}]
要求不使用pandas,仅用Python内置库实现。
实现思路
- 初始化一个空字典,用于跟踪每个
name对应的最低score条目 - 遍历原始列表中的每一个字典项:
- 取出当前项的
name作为字典的键 - 若该
name未在字典中,或者当前项的score比字典中已存条目score更小,则更新字典中该name对应的条目
- 取出当前项的
- 将字典中的所有值转换为列表,即为最终结果
代码实现
original_list = [ {"score":-10, "name": "Tom", "etc": 1}, {"score":-20, "name": "Tom", "etc": 2}, {"score":-110, "name": "Jerry", "etc": 3}, {"score":-210, "name": "Jerry", "etc": 5} ] result_dict = {} for item in original_list: name = item["name"] if name not in result_dict or item["score"] < result_dict[name]["score"]: result_dict[name] = item final_result = list(result_dict.values()) print(final_result)
代码说明
- 临时字典
result_dict以name为唯一键,确保每个name只会保留一条记录 - 遍历过程中实时比较
score值,保证最终留存的是该name对应的最小score条目 - 最后通过
list(result_dict.values())提取字典值并转为列表,得到目标结果
内容的提问来源于stack exchange,提问作者Nir Vana
相关产品推荐
相关产品推荐

