排序字典python字典

Moh*_*hit 0 python

我有一本字典词典,如下所示

d = {
  'hain': {'facet': 1, 'wrapp': 1, 'chinoiserie': 1}, 
  'library': {'sconc': 1, 'floor': 1, 'wall': 2, 'lamp': 6, 'desk': 1, 'table': 1, 'maine': 1} 
}
Run Code Online (Sandbox Code Playgroud)

所以,我想根据最终值反向排序这个词典:

所以我期待的是打印出这样的东西:

  key_1,   key_2 , value
 library   lamp      6
 library   wall      2
Run Code Online (Sandbox Code Playgroud)

等等...

我怎么得到这个?

谢谢

And*_*ark 6

以下是如何获取您正在寻找的排序列表:

items = ((k, k2, v) for k in d for k2, v in d[k].items())
ordered = sorted(items, key=lambda x: x[-1], reverse=True)
Run Code Online (Sandbox Code Playgroud)

这首先将您的字典转换为生成元组的生成器,(key_1, key_2, value)然后根据值对其进行排序.将reverse=True使得排序最高到最低.

结果如下:

>>> pprint.pprint(ordered)
[('library', 'lamp', 6),
 ('library', 'wall', 2),
 ('hain', 'facet', 1),
 ('hain', 'wrapp', 1),
 ('hain', 'chinoiserie', 1),
 ('library', 'sconc', 1),
 ('library', 'floor', 1),
 ('library', 'desk', 1),
 ('library', 'table', 1),
 ('library', 'maine', 1)]
Run Code Online (Sandbox Code Playgroud)

请注意,当值完全匹配时,顺序是任意的(除了项目将始终按分组key_1),如果您希望某些其他行为只是根据您在这些方案中的预期编辑您的问题.

获得此列表后,您可以通过迭代将其打印出来,如下所示:

for key_1, key_2, value in ordered:
    print key_1, key2, value         # add whatever formatting you want to here
Run Code Online (Sandbox Code Playgroud)