如何查找字典中同名称对应条目并保留得分最高的记录?
解决思路
- 第一步:创建临时字典按
name分组,记录每个name对应的最高分数和对应id - 第二步:遍历所有id和分数,更新临时字典的最高记录
- 第三步:用临时字典的结果生成过滤后的最终id_score_dict
可直接运行的代码实现
id_score_dict = {'abc': 1, 'bcd': 2, 'mnl': 3, 'pqr': 0} name_dict = {'abc': 'John', 'bcd': 'Mary', 'mnl': 'Cathy', 'pqr': 'John'} # 临时字典,key为name,value存储(当前最高score, 对应的id) name_best = {} for _id, score in id_score_dict.items(): name = name_dict[_id] # 当name无记录,或当前分数高于已记录的最高分时更新 if name not in name_best or score > name_best[name][0]: name_best[name] = (score, _id) # 重构得到最终的id_score_dict id_score_dict = {_id: score for score, _id in name_best.values()} print(id_score_dict) # 输出结果:{'abc': 1, 'bcd': 2, 'mnl': 3}
补充说明
如果遇到同name、同最高score的场景,上述逻辑会默认保留先遍历到的id;如果需要保留所有同分最高的条目,只需把临时字典的value改成列表,存储所有符合条件的id即可。
内容的提问来源于stack exchange,提问作者marlon
相关产品推荐
相关产品推荐

