python - 按内部值对嵌套字典进行排序
问题描述
如何按内部值对这个嵌套字典进行排序。键将更改,因此无法按键排序。键是整数,值是浮点数。
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}}
解决方案
您可以使用字典推导以有序的方式重建字典。从 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]
减号表示降序给出)。
推荐阅读
- javascript - 如何在 jquery 上使用“{$link->getImageLink($product->link_rewrite,”作为字符串?
- c# - 在 Xamarin UITableViewCell 中向 UILabel 添加中心约束不会使标签居中
- hyperledger-fabric - Hyperledger Fabric 的 ChannelCreationPolicy
- ios - 写入磁盘时导出 AVAsset?
- java - 如何使用三元运算符隐藏和显示 Textview
- ember.js - 如何在 Ember 组件中触发 didReceiveAttrs
- typescript - 尝试在新的绝对类型定义上运行 lint 时出错
- wso2 - WSO2 Identity Server 5.7.0 - 最小密码年龄的密码策略请求
- firebase - Google Analytics 在不“弹出” React Native 应用程序的情况下是否可用
- javascript - 如何遍历每个列表并在其中添加本地存储项目