Search code examples
pythonlistsortingdictionarysorteddictionary

Sort list of below dictionary in descending order


I have the below dictionary and i want sorted dictionary

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}]}

I want to sort value wise i.e The document has highest value print first then lower and don't print 0 value document.


Solution

  • Here a solution:

    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
    

    Output:

    {'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}]}