How to sort a Python dict's keys by value
我有一个像这样的听写
我想转换成desc并创建一个关键字列表。这个会回来的
我发现的所有例子都使用lambda,我对此不是很擅长。有什么方法可以让我通过这个循环,并在我进行排序吗?谢谢你的建议。
附言:如果有帮助的话,我可以用不同的方式创建初始dict。
你可以使用
1 | res = list(sorted(theDict, key=theDict.__getitem__, reverse=True)) |
(在python 2.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})] |