我需要按每人的嵌套值对以下内容进行排序(降序):
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)
答案 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()