如何过滤值为列表的Python字典,筛选最低测试分对应条目
问题描述
给定如下Python字典:
dict_results = { "first_names": ["john", "james", "carlos"], "last_names": ["smith", "jones", "sanchez"], "test_grade": [83, 79, 81] }
需要筛选出test_grade中分数最低的人员信息,最终得到如下输出字典:
filtered_dict = { "first_names": ["james"], "last_names": ["jones"], "test_grade": [79] }
解决方法
单最低分场景(仅取第一个最低分人员)
直接通过索引定位提取即可,代码如下:
dict_results = { "first_names": ["john", "james", "carlos"], "last_names": ["smith", "jones", "sanchez"], "test_grade": [83, 79, 81] } # 获取最低分对应的索引 min_grade_index = dict_results["test_grade"].index(min(dict_results["test_grade"])) # 构建筛选后的字典 filtered_dict = { key: [value[min_grade_index]] for key, value in dict_results.items() } print(filtered_dict)
代码逻辑:
- 用
min()拿到最低分,再通过index()获取该分数在列表中的位置 - 遍历原字典的键值对,提取对应索引的元素并包装成列表,生成目标字典
多最低分场景(保留所有最低分人员)
如果存在多个相同最低分的情况,可通过枚举找出所有符合条件的索引,再批量提取:
dict_results = { "first_names": ["john", "james", "carlos", "amy"], "last_names": ["smith", "jones", "sanchez", "lee"], "test_grade": [83, 79, 81, 79] } min_grade = min(dict_results["test_grade"]) # 找出所有最低分的索引 min_indices = [i for i, grade in enumerate(dict_results["test_grade"]) if grade == min_grade] # 构建包含所有最低分人员的字典 filtered_dict = { key: [value[i] for i in min_indices] for key, value in dict_results.items() } print(filtered_dict)
内容的提问来源于stack exchange,提问作者Diego
相关产品推荐
相关产品推荐

