按内部值对嵌套字典进行排序

时间:2019-10-11 18:55:43

标签: python dictionary

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

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

2 个答案:

答案 0 :(得分:1)

您可以使用字典理解来有序地重建字典。从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]给出,其中负号表示降序)。

答案 1 :(得分:0)

词典理解的替代方法。不一定更好,不同。这是在Python 3.6或更高版本上确定的,该版本保持插入顺序,否则必须使用OrderedDict。词典理解 not 不会给您这种选择。

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