如何通过内部值对嵌套字典进行排序。键将更改,因此无法按键排序。键是整数,值是浮点数。
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}}
答案 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}}