关于排序:如何按值对python dict的键进行排序

How to sort a Python dict's keys by value

我有一个像这样的听写

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

我想转换成desc并创建一个关键字列表。这个会回来的

["keyword3" ,"keyword1" ,"keyword4" ,"keyword2"]

我发现的所有例子都使用lambda,我对此不是很擅长。有什么方法可以让我通过这个循环,并在我进行排序吗?谢谢你的建议。

附言:如果有帮助的话,我可以用不同的方式创建初始dict。


你可以使用

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

(在python 2.x中不需要list)

theDict.__getitem__实际上相当于lambda x: theDict[x]

(lambda只是一个匿名函数。例如

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

这相当于

1
2
3
4
>>> def h(x):
...   return x + 5
>>> h(123)
128

)


1
2
3
>>> d={"keyword1":3 ,"keyword2":1 ,"keyword3":5 ,"keyword4":2 }
>>> sorted(d, key=d.get, reverse=True)
['keyword3', 'keyword1', 'keyword4', 'keyword2']


我会想出这样的办法:

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

但是Kennytm的解决方案更好:)


我总是这样做的……使用排序方法有什么好处吗?

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

哎呀,没有读过关于不使用lambda的部分=(


无法对听写进行排序,只能获得已排序的听写的表示形式。dict本身的顺序较少,但其他类型(如list和tuples)则没有。所以您需要一个经过排序的表示,它可能是一个元组列表。例如,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
'''
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

输出:

1
[('Vanita', {'score': 56}), ('Anil', {'score': 69}), ('Rahul', {'score': 75}), ('Dinesh', {'score': 78}), ('Anup', {'score': 95}), ('Suhas', {'score': 95})]