如何对嵌套字典dict_dif中各区域数值进行升序排序
对嵌套字典中各区域数值列表排序并保留层级顺序
你的dict_dif结构是变量 -> 区域 -> 数值列表,需求是给每个区域下的60个数据点从小到大排序,同时保持变量和区域的原有顺序。你之前的代码错误地对「区域」进行了排序,而不是对区域内的数值列表排序。
正确实现代码(生成新字典)
sorted_dict = { var: {roi: sorted(data_list) for roi, data_list in regions.items()} for var, regions in dict_dif.items() }
代码说明
- 外层遍历每个变量及其对应的区域字典,保留变量的原有顺序(Python 3.7+ 字典默认维护插入顺序)
- 内层遍历每个区域及其数值列表,用
sorted()函数生成排序后的新列表,区域的顺序和原字典完全一致 - 最终得到的
sorted_dict结构和原字典完全相同,只是每个区域的数值列表被从小到大排序
原地修改原字典(不生成新字典)
如果不需要保留原字典的数值顺序,想直接修改原数据,可以用循环原地排序:
for regions in dict_dif.values(): for roi, data_list in regions.items(): data_list.sort() # 原地排序,直接修改原列表内容
为什么你的原代码不对?
你之前的代码:
sorted_dict = {var : dict(sorted(roi.items(), key = lambda ele: ele[1])) for var, roi in dict_dif.items()}
这段代码的逻辑是对每个变量下的区域进行排序:sorted(roi.items(), key=lambda ele: ele[1])会把区域按其对应的列表来排序(Python中列表比较默认取第一个元素的值),这和你「排序区域内数值」的需求完全相反。
内容的提问来源于stack exchange,提问作者Philipp
相关产品推荐
相关产品推荐

