You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何比较Python中两个由值定义排序规则的字典的顺序

Python字典按值排序的顺序对比实现

核心逻辑

  • 分别对两个字典按值排序,提取排序后的键序列,该序列的顺序就是由值定义的排序规则
  • 对比两个键序列的一致性,同时统计每个键在两个序列中的位置差,即可定位差异点
  • 排序方向默认升序,需要降序可自行调整参数

可直接运行的代码

d1 = {570.44: 2, 305.21: 1, 271.94: 0, 463.20: 3, 556.60: 4, 596.27: 5}
d2 = {570.44: 537.5, 596.27: 767.0, 556.60: 644.5, 271.94: 285.0, 305.21: 334.5, 463.20: 428.5}

# 按值升序排序,获取排序后的键列表
# 若需要降序排序,添加 reverse=True 参数即可:sorted(..., reverse=True)
sorted_keys_d1 = [k for k, v in sorted(d1.items(), key=lambda item: item[1])]
sorted_keys_d2 = [k for k, v in sorted(d2.items(), key=lambda item: item[1])]

print("d1按值升序的键顺序:", sorted_keys_d1)
print("d2按值升序的键顺序:", sorted_keys_d2)

# 判断排序是否完全一致
order_identical = sorted_keys_d1 == sorted_keys_d2
print(f"\n两个字典的排序顺序是否完全一致:{order_identical}")

# 输出所有位置存在差异的键
if not order_identical:
    # 生成每个键对应位置的映射,此处输出按用户习惯从1开始计数
    pos_map_d1 = {key: idx+1 for idx, key in enumerate(sorted_keys_d1)}
    pos_map_d2 = {key: idx+1 for idx, key in enumerate(sorted_keys_d2)}
    
    print("\n位置存在差异的键:")
    for key in pos_map_d1:
        if pos_map_d1[key] != pos_map_d2[key]:
            print(f"键{key}:d1中排第{pos_map_d1[key]}位,d2中排第{pos_map_d2[key]}位")

运行输出结果

d1按值升序的键顺序: [271.94, 305.21, 570.44, 463.2, 556.6, 596.27]
d2按值升序的键顺序: [271.94, 305.21, 463.2, 570.44, 556.6, 596.27]

两个字典的排序顺序是否完全一致:False

位置存在差异的键:
键570.44:d1中排第3位,d2中排第4位
键463.2:d1中排第4位,d2中排第3位

内容的提问来源于stack exchange,提问作者KansaiRobot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 15:18:03