Python:按嵌套字典值排序(无类别)

标签 python dictionary nested

我需要按每个人的嵌套值对以下内容进行排序(降序):

d={
'BILLY': {'beer': 1, 'socks': 3, 'germs': 2}, 
'JAN': {'mewo': 18, 'towel': 83, 'bee': 27}, 
'NICK': {'shoes': 50, 'hats': 15, 'dogs': 95}
}

结果应该是

比利:
socks = 3
细菌 = 2
啤酒= 1

一月:
毛巾=83
蜜蜂=27
喵= 18

尼克:
狗= 95
鞋子 = 50
帽子 = 15

我尝试了以下操作,但出现错误:

outer_keys = d.keys()
print ("outer keys:")
for outer_key in outer_keys:
    print (outer_key)

print ("*" * 40)
inner_keys = d[outer_key].keys()

for key in inner_keys:
    ordered = sorted(d.items(), key=lambda item: item[1][key])

print(ordered)

最佳答案

由于您还需要迭代子词典(存储在值中),因此您需要一个嵌套循环。所以“骨架”看起来像:

for k, subdic in d.items():
    print(k)
    # ...
    print()

字典本身是无序的。我们需要一个维持顺序的数据结构,例如列表。我们可以通过获取元组的来对项目进行排序。因此,对于子词典,我们可以这样排序:

sorted(subdic.items(), key=lambda x: x[1], reverse=True)

然后我们还需要迭代这些项目,并打印它们,例如:

for subk, v in sorted(subdic.items(), key=lambda x: x[1], reverse=True):
    print(f'{subk} = {v}')

所以我们可以将两者结合起来:

for k, subdic in d.items():
    print(k)
    for subk, v in sorted(subdic.items(), key=lambda x: x[1], reverse=True):
        print(f'{subk} = {v}')
    print()

关于Python:按嵌套字典值排序(无类别),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52729503/

相关文章:

hadoop - 使用 HIVE 减少映射

variables - 如何将变量的值用作变量本身?

python - 通过任何 python 或 R 模块可视化图中重叠的社区

python - 类似 pydoc 的程序在浏览器中浏览 Python 文件的内容/代码?

c# - 了解行为并重写 GetHashCode()

java - 将映射转换为 java 8 流中更扁平的结构

python - 在此 return 语句中使用 and 运算符

python - 如何使用 python 装饰器修复 "NoneType"错误?

Javascript - 将嵌套对象中的所有值设置为空

c++ - 在字段声明中使用 "struct Foo"不会转发声明嵌套类