-1

我有一个列表,它目前按键(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
4

3 回答 3

1

key参数sort()允许您指定排序键。

你可以使用:

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

或者,等效地,

lst.sort(key=operator.itemgetter(1))
于 2013-10-12T14:44:55.030 回答
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

根据可变序列类型

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

...

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

于 2013-10-12T14:45:11.640 回答
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
于 2013-10-12T15:03:54.013 回答