2013-10-12 151 views
-1

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

14 A 
157 B 
17 C 
... 

我需要反转此顺序。我想用价值,而不是关键的排序,所以它读取这样的:

14 A 
17 C 
157 B 

我已阅读并尝试了所有的文件我能找到这里和谷歌。我认为它不应该太复杂,但是我正在过度看待某些东西。

有没有简单的解决方案来读取按数字值的顺序?每次我尝试按值排序时,它都会显示'int或str不可调用'。我不明白这是什么意思。

我的一些代码如下:

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

for key, val in lst: 
    print val, key 
+1

查看列表方法'sort'和参数'key'。 – rlms

+0

http://stackoverflow.com/a/16772088/489590 –

+0

谢谢Brian。我也试过这个。我也遇到了sort()和sort()的问题。 –

回答

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指定用于提取从每个列表元素的 对比密钥一个参数的函数:键= str.lower。默认 值为无。

+0

谢谢falsetru,这个解决方案也可以。你能解释一下lst.sort(key = lambda x:x [1])的行和语法吗?这是怎么读的? [1]是否代表列表中值的位置? –

+0

@MariaGosur,'lambda'是一种匿名函数。 'lambda x:x [1]'是一个返回传递参数的第二项的函数。这里的'x'是列表中的每一项。 – falsetru

+0

啊没关系。我简要概述了它。我必须花更多时间在实践中研究lambda,尽管我隐约地使用它。虽然实质上有意义。谢谢你解释它。这有很大帮助。 –

1

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

你可以使用:

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

,或者等价地,

lst.sort(key=operator.itemgetter(1)) 
+0

非常感谢你的帮助NPE。对此,我真的非常感激。第一行建议运作良好。但是,我不知道我完全掌握那条线正在阅读的内容。你能解释一下lambda和v的语法吗? –

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 
+0

谢谢fjammes。我还没有深入研究python的进口,但我会进一步研究这一点。我很欣赏并重视每个人的帮助! –