首页 > 解决方案 > 按内部值对嵌套字典进行排序

问题描述

如何按内部值对这个嵌套字典进行排序。键将更改,因此无法按键排序。键是整数,值是浮点数。

NestedDict = {'1': {2: 0.3, 7: 0.5, 4: 0.4, 3: 0.75},
              '2': {5: 0.3, 7: 0.5, 4: 0.4, 1: 0.75},
              '3': {15: 0.3, 7: 0.5, 4: 0.4, 70: 0.75}}

这是我需要的结果。无论键如何,值都从最大到最小排序。

# NestedDict = {'1': {3: 0.75, 7: 0.5, 4: 0.4, 2: 0.3},
#               '2': {1: 0.75, 7: 0.5, 4: 0.4, 5: 0.3},
#               '3': {70: 0.75, 7: 0.5, 4: 0.4, 15: 0.3}}

标签: pythondictionary

解决方案


您可以使用字典推导以有序的方式重建字典。从 Python 3.7 开始,您将项目添加到字典的顺序被保留。

NestedDict = {
    outer_key: {
        inner_key: inner_value for inner_key, inner_value in
        sorted(inner_dict.items(), key=lambda d: -d[1])
    }
    for outer_key, inner_dict in NestedDict.items()
} 

现在NestedDict

{'1': {3: 0.75, 7: 0.5, 4: 0.4, 2: 0.3},
 '2': {1: 0.75, 7: 0.5, 4: 0.4, 5: 0.3},
 '3': {70: 0.75, 7: 0.5, 4: 0.4, 15: 0.3}}

外层是相同的,但对于内层,我们正在迭代内部字典的排序版本(按它们的值排序,由d[1]减号表示降序给出)。


推荐阅读