How to sort a Python dict's keys by value

后端 未结 5 2091
逝去的感伤
逝去的感伤 2020-12-15 05:35

I have a dict that looks like this

{ \"keyword1\":3 , \"keyword2\":1 , \"keyword3\":5 , \"keyword4\":2 }

And I would like to convert it DESC and

相关标签:
5条回答
  • 2020-12-15 06:03

    You could use

    res = list(sorted(theDict, key=theDict.__getitem__, reverse=True))
    

    (You don't need the list in Python 2.x)

    The theDict.__getitem__ is actually equivalent to lambda x: theDict[x].

    (A lambda is just an anonymous function. For example

    >>> g = lambda x: x + 5
    >>> g(123)
    128
    

    This is equivalent to

    >>> def h(x):
    ...   return x + 5
    >>> h(123)
    128
    

    )

    0 讨论(0)
  • 2020-12-15 06:06

    It is not possible to sort a dict, only to get a representation of a dict that is sorted. Dicts are inherently order less, but other types, such as lists and tuples, are not. So you need a sorted representation, which will be a list—probably a list of tuples. For instance,

    '''
    Sort the dictionary by score. if the score is same then sort them by name 
    { 
     'Rahul'  : {score : 75} 
     'Suhas' : {score : 95} 
     'Vanita' : {score : 56} 
     'Dinesh' : {score : 78} 
     'Anil'  : {score : 69} 
     'Anup'  : {score : 95} 
    } 
    '''
    import operator
    
    x={'Rahul' : {'score' : 75},'Suhas' : {'score' : 95},'Vanita' : {'score' : 56}, 
       'Dinesh' : {'score' : 78},'Anil' : {'score' : 69},'Anup' : {'score' : 95} 
      }
    sorted_x = sorted(x.iteritems(), key=operator.itemgetter(1))
    print sorted_x
    

    output:

    [('Vanita', {'score': 56}), ('Anil', {'score': 69}), ('Rahul', {'score': 75}), ('Dinesh', {'score': 78}), ('Anup', {'score': 95}), ('Suhas', {'score': 95})]
    
    0 讨论(0)
  • 2020-12-15 06:14
    >>> d={ "keyword1":3 , "keyword2":1 , "keyword3":5 , "keyword4":2 }
    >>> sorted(d, key=d.get, reverse=True)
    ['keyword3', 'keyword1', 'keyword4', 'keyword2']
    
    0 讨论(0)
  • 2020-12-15 06:15

    I would come up with something like this:

    [k for v, k in sorted(((v, k) for k, v in theDict.items()), reverse=True)]
    

    But KennyTM's solution is much nicer :)

    0 讨论(0)
  • 2020-12-15 06:20

    i always did it this way....are there advantages to using the sorted method?

    keys = dict.keys()
    keys.sort( lambda x,y: cmp(dict[x], dict[y]) )
    

    whoops didnt read the part about not using lambda =(

    0 讨论(0)
提交回复
热议问题