如何基于另一个字典的score值对Python字典进行排序
Python字典按指定规则排序实现方案
Python 3.7及以上版本原生支持字典保留插入顺序,你可以直接用sorted函数配合自定义排序规则实现需求,具体如下:
完整实现代码
# 给定的原始字典 dict1 = {'key10': {'fail_pass': 1, 'score': 29.5}, 'key20': {'fail_pass': 0, 'score': 37.25}, 'key30': {'fail_pass': 0, 'score': 25.75}, 'key60': {'fail_pass': 1, 'score': 225.75}, 'key70': {'fail_pass': 1, 'score': 25.25}, 'key170': {'fail_pass': 1, 'score': 0.25}} dict2 = {'key10': 1, 'key20': 1, 'key60': 1} # 按dict1对应键的score从高到低排序dict2 sorted_dict2 = dict(sorted( dict2.items(), key=lambda x: dict1[x[0]]['score'], reverse=True )) # 输出验证 print(sorted_dict2)
运行后输出结果和预期完全一致:{'key60': 1, 'key20': 1, 'key10': 1}
逻辑说明
- 调用
dict2.items()获取dict2所有键值对的可迭代对象 sorted函数的key参数传入lambda表达式,指定排序依据为dict1中对应键的score值reverse=True设置排序规则为降序,即score越高排序越靠前- 最后将
sorted返回的已排序元组列表转换为字典,即可得到保留排序顺序的结果字典
容错优化(可选)
如果存在dict2的键不在dict1中的场景,可以调整排序规则避免抛出KeyError:
sorted_dict2 = dict(sorted( dict2.items(), # 不存在的键默认score为0,排在最后 key=lambda x: dict1.get(x[0], {}).get('score', 0), reverse=True ))
内容的提问来源于stack exchange,提问作者AJW
相关产品推荐
相关产品推荐

