如何基于第一个字典的值对两个同键字典进行排序?
同步排序两个键完全相同的字典(基于其中一个的计数值)
嘿,这个问题其实很好搞定!核心思路就是先把两个字典的共同键提取出来,按第一个字典的计数值排序,再用这个排序后的键列表重新构建两个字典,这样就能实现同步排序了。我用Python给你演示具体操作,完全贴合你的需求:
第一步:先把你的示例整理成可运行的字典
我补全了第一个字典里8对应的计数值(应该是5对吧?):
# 存储计数值的字典 count_dict = {0: 0, 10: 1, 17: 2, 3: 3, 28: 4, 8: 5} # 存储实际值的查找表字典 value_dict = {0: "0", 10: "String1", 17: "String2", 3: "String3", 28: "String4", 8: "String5"}
第二步:获取排序后的键列表
根据你的预期输出,我们需要把键按count_dict的原始值从大到小排序,同时保留0在第一位:
# 先单独保留0,剩下的键按count_dict的值降序排序 sorted_keys = [0] + sorted([k for k in count_dict if k != 0], key=lambda x: count_dict[x], reverse=True) # 这里如果需要其他排序逻辑,比如升序,去掉reverse=True就行
第三步:构建同步排序后的两个字典
第一个字典:给排序后的键重新分配连续计数值
按照你的预期,第一个字典的新值是排序后的位置索引(从0开始):
sorted_count_dict = {key: idx for idx, key in enumerate(sorted_keys)}
第二个字典:按排序后的键顺序保留原始值
直接用排序后的键列表从原查找表取值即可:
sorted_value_dict = {key: value_dict[key] for key in sorted_keys}
看看结果!
运行上面的代码后,你会得到完全符合预期的输出:
- 排序后的计数字典:
{0: 0, 28: 1, 17: 2, 10: 3, 8: 4, 3: 5} - 排序后的查找表字典:
{0: "0", 28: "String4", 17: "String2", 10: "String1", 8: "String5", 3: "String3"}
核心逻辑总结
不管你需要升序还是降序排序,只要调整sorted()函数里的reverse参数就行,整个流程的关键就是基于第一个字典的值得到排序后的键列表,再用这个列表同步重构两个字典。
内容的提问来源于stack exchange,提问作者user10172226
相关产品推荐
相关产品推荐

