【问题标题】:Sort list of below dictionary in descending order按降序排序以下字典列表
【发布时间】:2020-05-20 17:00:50
【问题描述】:

我有下面的字典,我想要排序字典

dict1 = {'years': [{'doc_1': 1}, {'doc_2': 0}, {'doc_3': 0}], 'working': [{'doc_1': 1}, {'doc_2': 1}, {'doc_3': 0}],
     'experience': [{'doc_1': 1}, {'doc_2': 0}, {'doc_3': 0}], 'I': [{'doc_1': 1}, {'doc_2': 0}, {'doc_3': 0}],
     'T': [{'doc_1': 1}, {'doc_2': 0}, {'doc_3': 0}], 'associated': [{'doc_1': 1}, {'doc_2': 0}, {'doc_3': 0}],
     'different': [{'doc_1': 1}, {'doc_2': 1}, {'doc_3': 0}],
     'organizations': [{'doc_1': 1}, {'doc_2': 0}, {'doc_3': 0}],
     'His': [{'doc_1': 1}, {'doc_2': 0}, {'doc_3': 1}], 'work': [{'doc_1': 1}, {'doc_2': 0}, {'doc_3': 0}],
     'domain': [{'doc_1': 1}, {'doc_2': 1}, {'doc_3': 0}], 'area': [{'doc_1': 1}, {'doc_2': 0}, {'doc_3': 0}],
     'financial': [{'doc_1': 1}, {'doc_2': 1}, {'doc_3': 0}], 'Project': [{'doc_1': 0}, {'doc_2': 1}, {'doc_3': 0}],
     'Manager': [{'doc_1': 0}, {'doc_2': 1}, {'doc_3': 0}], 'He': [{'doc_1': 0}, {'doc_2': 1}, {'doc_3': 0}],
     'areas': [{'doc_1': 0}, {'doc_2': 1}, {'doc_3': 0}], 'major': [{'doc_1': 0}, {'doc_2': 1}, {'doc_3': 0}],
     'patient': [{'doc_1': 0}, {'doc_2': 2}, {'doc_3': 0}], 'billing': [{'doc_1': 0}, {'doc_2': 1}, {'doc_3': 0}],
     'assessments': [{'doc_1': 0}, {'doc_2': 1}, {'doc_3': 0}],
     'radiation': [{'doc_1': 0}, {'doc_2': 1}, {'doc_3': 0}],
     'endoscopy': [{'doc_1': 0}, {'doc_2': 1}, {'doc_3': 0}],
     'interest': [{'doc_1': 0}, {'doc_2': 0}, {'doc_3': 1}],
     'data': [{'doc_1': 0}, {'doc_2': 0}, {'doc_3': 3}], 'science': [{'doc_1': 0}, {'doc_2': 0}, {'doc_3': 2}],
     'favorite': [{'doc_1': 0}, {'doc_2': 0}, {'doc_3': 1}], 'book': [{'doc_1': 0}, {'doc_2': 0}, {'doc_3': 1}],
     'big': [{'doc_1': 0}, {'doc_2': 0}, {'doc_3': 1}]}

我想对价值进行排序,即 该文件先打印价值最高的文件,然后再打印价值较低的文件,并且不打印价值为 0 的文件。

【问题讨论】:

  • 你到底卡在哪里了?
  • 请阅读how to post a proper question. Stackoverflow 并不是一个有人可以做你需要的事情的网站。请展示以下内容: 1. 到目前为止你做了什么? 2. 输出是什么? 3. 预期的输出是什么?
  • 感谢@yatu 的回复!文档(doc_1, doc_2, doc_3) 的值先打印,再低,不打印 0 值的文档。

标签: python list sorting dictionary sorteddictionary


【解决方案1】:

这里有一个解决方案:

d = {}
for key,list_dict in dict1.items():
    d[key]  = sorted([k for k  in list_dict if list(k.items())[0][1] >0], key=lambda x: list(x.items())[0][1], reverse=True)

d

输出:

{'He': [{'doc_2': 1}],
 'His': [{'doc_1': 1}, {'doc_3': 1}],
 'I': [{'doc_1': 1}],
 'Manager': [{'doc_2': 1}],
 'Project': [{'doc_2': 1}],
 'T': [{'doc_1': 1}],
 'area': [{'doc_1': 1}],
 'areas': [{'doc_2': 1}],
 'assessments': [{'doc_2': 1}],
 'associated': [{'doc_1': 1}],
 'big': [{'doc_3': 1}],
 'billing': [{'doc_2': 1}],
 'book': [{'doc_3': 1}],
 'data': [{'doc_3': 3}],
 'different': [{'doc_1': 1}, {'doc_2': 1}],
 'domain': [{'doc_1': 1}, {'doc_2': 1}],
 'endoscopy': [{'doc_2': 1}],
 'experience': [{'doc_1': 1}],
 'favorite': [{'doc_3': 1}],
 'financial': [{'doc_1': 1}, {'doc_2': 1}],
 'interest': [{'doc_3': 1}],
 'major': [{'doc_2': 1}],
 'organizations': [{'doc_1': 1}],
 'patient': [{'doc_2': 2}],
 'radiation': [{'doc_2': 1}],
 'science': [{'doc_3': 2}],
 'work': [{'doc_1': 1}],
 'working': [{'doc_1': 1}, {'doc_2': 1}],
 'years': [{'doc_1': 1}]}

【讨论】:

    【解决方案2】:

    这应该可以解决您的问题:-

    res = {}
    for key, value in dict1.items():
        res[key] = [i for i in dict1[key] if 0 not in (i.values())]
        res[key] = sorted(res[key], key=lambda x : x[list(x.keys())[0]], reverse=True)
    
    print(res)
    

    输出:-

    {'years': [{'doc_1': 1}], 'working': [{'doc_1': 1}, {'doc_2': 1}], 
     'experience': [{'doc_1': 1}], 'I': [{'doc_1': 1}], 'T': [{'doc_1': 1}], 
     'associated': [{'doc_1': 1}], 'different': [{'doc_1': 1}, {'doc_2': 1}], 
     'organizations': [{'doc_1': 1}], 'His': [{'doc_1': 1}, {'doc_3': 1}], 
     'work': [{'doc_1': 1}], 'domain': [{'doc_1': 1}, {'doc_2': 1}], 
     'area': [{'doc_1': 1}], 'financial': [{'doc_1': 1}, {'doc_2': 1}], 
     'Project': [{'doc_2': 1}], 'Manager': [{'doc_2': 1}], 'He': [{'doc_2': 1}], 
     'areas': [{'doc_2': 1}], 'major': [{'doc_2': 1}], 'patient': [{'doc_2': 2}], 
     'billing': [{'doc_2': 1}], 'assessments': [{'doc_2': 1}], 'radiation': [{'doc_2': 1}], 
     'endoscopy': [{'doc_2': 1}], 'interest': [{'doc_3': 1}], 'data': [{'doc_3': 3}], 
     'science': [{'doc_3': 2}], 'favorite': [{'doc_3': 1}], 'book': [{'doc_3': 1}], 
     'big': [{'doc_3': 1}]
    }
    

    【讨论】:

    • 感谢您的回复。检查这个 dict1 = {'years': [{'doc_1': 1}, {'doc_2': 3}, {'doc_3': 0}]} res = {} 的键,dict1.items() 中的值: res[key] = [i for i in dict1[key] if 0 not in (i.values())] res[key] = sorted(res[key], key=lambda x : x[list(x.keys ())[0]]) 打印(分辨率)
    • @AliZaib,谢谢指出,我已经更新了代码。现在它应该可以工作了。
    • 感谢您的代码现在运行良好。但我已经标记了答案。我也没有其他选择来标记您的答案。我想标记,但我没有选择。非常感谢
    • 没问题,我知道在 StackOverflow 上只能接受一个答案。如果你愿意,你可以反对我的回答。谢谢@AliZaib
    • 在你评论之前我已经标记了他的答案。你们俩都应该得到绿色的勾号,但我别无选择。我想在你的答案上打勾,但我也不想出错。
    猜你喜欢
    • 1970-01-01
    • 2016-11-22
    • 1970-01-01
    • 2012-10-18
    • 2020-08-26
    • 1970-01-01
    • 2012-09-30
    • 1970-01-01
    • 2017-02-28
    相关资源
    最近更新 更多