如何按数值从低到高排序带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
相关产品推荐
相关产品推荐

