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

时间:2018-10-09 21:21:18

标签: 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}
}

结果应该

比利:
袜子= 3
细菌= 2
啤酒= 1

JAN:
毛巾= 83
蜜蜂= 27
mewo = 18

NICK:
狗= 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)

1 个答案:

答案 0 :(得分:1)

由于还需要遍历子字典(存储在值中),因此需要嵌套循环。因此,“骨架”如下所示:

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

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

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()