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

如何按数值从低到高排序带subject关联的深度嵌套字典

嵌套字典按数值排序并保留键值对应关系

问题说明

通过for循环将数据加载到空字典dict_dif = {},最终嵌套结构为dict_dif[var][roi][subject] = numeric_value——每个var、roi、subject对应唯一数值,例如dict_dif["acw"]["V1"]["10600"]会返回0.44242。

需要实现:对每个var下的每个roi内的subject-数值对,按数值从低到高排序,同时保留subject与数值的对应关系。

当前字典示例:

{'acw': {'V1': {'100610': -0.14749908116389868,
   '102311': -0.0024704496902879514,
   '104416': 0.08791335022154448,
   '105923': -0.14556719812398553,
...
}}}

期望排序后的字典:

{'acw': {'V1': {'100610': -0.14749908116389868,
'105923': -0.14556719812398553,
'102311': -0.0024704496902879514,
'104416': 0.08791335022154448,
...
}}}

解决方案

方法1:适配Python 3.7+(原生字典保留插入顺序)

Python 3.7及以上版本中,普通字典默认保留键的插入顺序。直接遍历层级排序后重构字典即可:

# 遍历每个var层级
for var in dict_dif:
    # 遍历每个roi层级
    for roi in dict_dif[var]:
        # 按数值从小到大排序键值对,得到元组列表
        sorted_pairs = sorted(dict_dif[var][roi].items(), key=lambda item: item[1])
        # 重构为有序字典
        dict_dif[var][roi] = dict(sorted_pairs)

方法2:兼容Python 3.6及以下(使用OrderedDict)

如果需要适配更早的Python版本,用collections.OrderedDict确保顺序:

from collections import OrderedDict

for var in dict_dif:
    for roi in dict_dif[var]:
        sorted_pairs = sorted(dict_dif[var][roi].items(), key=lambda item: item[1])
        dict_dif[var][roi] = OrderedDict(sorted_pairs)

核心逻辑

提取每个roi下的subject-数值键值对,用sorted()函数以数值(item[1])为排序依据,得到按从小到大排列的元组列表,再将列表转为字典(或OrderedDict),即可保留排序后的键值对应关系,完全适配当前的嵌套结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 10:05:22