排序Python列表

时间:2013-10-12 14:41:34

标签: python python-2.7

我有一个列表,它目前按键(A,B,C)排序。该值是密钥在文件中出现的次数的计数。代码给出了这样的结果:

14 A
157 B
17 C
...

我需要扭转这个顺序。我想按值而不是键进行排序,所以它的内容如下:

14 A
17 C
157 B

我已经阅读并尝试了我在这里和Google上找到的所有文档。我不认为它应该太复杂,但我在思考一些东西。

是否有一个简单的解决方案来按数字值读取订单?每次我尝试按值排序时,它都会说“int或str不可调用”。我不明白这意味着什么。

我的一些代码如下:

lst = list()
for key, val in counts.items():
    lst.append((key, val))
lst.sort()    

for key, val in lst:
   print val, key

3 个答案:

答案 0 :(得分:1)

key的{​​{1}}参数允许您指定排序键。

您可以使用:

sort()

或等同地

lst.sort(key=lambda (k,v):v)

答案 1 :(得分:0)

list.sort接受可选的key参数。

>>> counts = {
...     'A': 14,
...     'B': 157,
...     'C': 17,
... }
>>>
>>> lst = counts.items()
>>> lst.sort(key=lambda x: x[1]) # x[1] => count
>>> for key, val in lst:
...     print val, key
...
14 A
17 C
157 B

根据Mutable Sequence Types

  

sort()方法采用可选参数来控制比较。

     

...

     

key指定用于提取a的一个参数的函数   每个列表元素的比较键:key = str.lower。默认   值为无。

答案 2 :(得分:0)

这是有效的,假设

import operator
for key, val in counts.items():
  lst.append((key, val))
# lst should be like this :
# lst = [('A',14), ('B',157), ('C',17), ('D',12), ('E',189)]
sorted_lst = sorted(set(lst), key=operator.itemgetter(1))
print sorted_lst