整理词典python

2024-10-01 13:35:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一本如下词典

d = {
  'hain': {'facet': 1, 'wrapp': 1, 'chinoiserie': 1}, 
  'library': {'sconc': 1, 'floor': 1, 'wall': 2, 'lamp': 6, 'desk': 1, 'table': 1, 'maine': 1} 
}

因此,我想根据最终值对字典进行反向排序:

所以我希望打印出这样的东西:

^{pr2}$

等等。。。在

我怎么得到这个?在

谢谢


Tags: 字典排序librarytable词典facetwalldesk
3条回答

我不确定您希望如何对输出进行排序,但这可以让您开始:

>>> for key in d:
        for key2 in d[key]:
            print key, key2, d[key][key2]

以下是如何获取要查找的已排序列表:

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)

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

结果如下:

^{pr2}$

请注意,当值完全匹配时,顺序是任意的(除了项目总是按key_1分组),如果您希望其他行为,只需使用您在这些场景中所期望的来编辑您的问题。在

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

for key_1, key_2, value in ordered:
    print key_1, key2, value         # add whatever formatting you want to here

如果您想先按value反向排序,然后按key升序排序,然后按key_2进行排序:

dout={}
for e in d:
    for es in d[e]:
        lineOut='%s %s %i' % (e, es, d[e][es])
        key= d[e][es]
        dout.setdefault(key, []).append(lineOut)  

for e in sorted(dout, reverse=True):
    for ea in sorted(dout[e], reverse=False):
        print ea         

印刷品:

^{pr2}$

相关问题 更多 >