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