-2

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

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}}
4

2 回答 2

2

您可以使用字典推导以有序的方式重建字典。从 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]减号表示降序给出)。

于 2019-10-11T19:44:44.220 回答
0

字典理解的替代方法。不一定更好,不同。这是基于 Python 3.6 或更高版本的,它维护插入顺序,否则必须使用OrderedDict. 字典推导给你那个选项。

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}}

keys = [k for k in NestedDict.keys()]
dict_values = [v for v in NestedDict.values()]
dict_values = [dict(sorted(x.items(), key=lambda kv: -kv[1])) for x in dict_values] # or OrderedDict

NestedDict = dict(zip(keys, dict_values)) # or OrderedDict
print(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}}
于 2019-10-11T20:36:30.570 回答