5

I have below structure

{
    'searchResult' : [{
            'resultType' : 'station',
            'ranking' : 0.5
        }, {
            'resultType' : 'station',
            'ranking' : 0.35
        }, {
            'resultType' : 'station',
            'ranking' : 0.40
        }
    ]
}

and want to get

{
    'searchResult' : [{
            'resultType' : 'station',
            'ranking' : 0.5
        }, {
            'resultType' : 'station',
            'ranking' : 0.4
        }, {
            'resultType' : 'station',
            'ranking' : 0.35
        }
    ]
}

Tried the code without success

result = sorted(result.items(), key=lambda k: k[1][0][1]["ranking"], reverse=True)
3
  • Thanks all! But which method is faster d["item"].sort() or sorted()? Commented Aug 19, 2015 at 14:44
  • 1
    possible duplicate of How do I sort a list of dictionaries by values of the dictionary in Python? Commented Aug 19, 2015 at 14:45
  • @SpanishBoy sorted returns a new object. If you don't need the original object you'd better stick with sort for speed and memory efficiency. Commented Aug 19, 2015 at 14:47

3 Answers 3

5

If you are okay with changing the objects in-place.

a = {
    'searchResult' : [{
                       'resultType' : 'station',
                       'ranking' : 0.5
                      }, {
                       'resultType' : 'station',
                       'ranking' : 0.35
                      }, {
                      'resultType' : 'station',
                      'ranking' : 0.40
                      }]
  }

a["searchResult"].sort(key=lambda d: d["ranking"], reverse=True)

Or you can make a deep copy to keep the original

from copy import deepcopy


srt_dict = deepcopy(a)
srt_dict["searchResult"].sort(key=lambda d: d["ranking"], reverse=True)
Sign up to request clarification or add additional context in comments.

Comments

5

You can simply do an inplace sort on the list, using key=itemgetter("ranking") and reverse=True:

from operator import itemgetter
d["searchResult"].sort(key=itemgetter("ranking"),reverse=True)

print(d)
{'searchResult': [{'resultType': 'station', 'ranking': 0.5}, {'resultType': 'station', 'ranking': 0.4}, {'resultType': 'station', 'ranking': 0.35}]}

Comments

2

You can just sort the list and write over itself in the dictionary.

result = {
    'searchResult' : [{
            'resultType' : 'station',
            'ranking' : 0.5
        }, {
            'resultType' : 'station',
            'ranking' : 0.35
        }, {
            'resultType' : 'station',
            'ranking' : 0.40
        }
    ]
}

result['searchResult'] = sorted(result['searchResult'], key= lambda x: x['ranking'], reverse=True)

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.