Python排序不起作用

问题描述 投票:0回答:1

我有用于对元组列表进行排序的代码:

s = "betty bought a bit of butter but the butter was bitter"
words = s.split()
l = []
k = []
unique_words = sorted(set(words))
for word in unique_words:
     k.append(word)
     l.append(words.count(word))

z = zip(k,l)
print z
reversed(sorted(z, key=lambda x: x[1]))
print z

z是相同的,列表没有被排序甚至被颠倒。

我正在尝试按count的整数值排序。

python list sorting reverse
1个回答
4
投票

对于就地排序,应使用z.sort()

如果您坚持使用sorted,则将值发送回z

因此,使用其中之一,

z.sort(key = lambda x:x[1])
z.reverse()

或,

z = reversed(sorted(z, key=lambda x: x[1]))

或者,更复杂的解决方案可能是:

z = sorted(z, key=lambda x: x[1], reverse= True)

事实上,使用collections.Counter()可以更轻松地获得最终结果>

from collections import Counter 
z = sorted(Counter(s.split()).items(), key = lambda x:x[1], reverse = True)

通过两个多个键排序可以,您可以将它们作为元组传递。对于您而言,解决方案是:

# first sort by negatives of the second item, then alphabetically. 
z = sorted(z, key=lambda x: (-x[1],x[0]))

输出:

[('butter', 2), ('a', 1), ('betty', 1), ('bit', 1), ('bitter', 1),
('bought', 1), ('but', 1), ('of', 1), ('the', 1), ('was', 1)]

5
投票

reversedsorted不能就地排序;相反,它们返回新排序和反向的对象。将倒数第二行更改为


2
投票

这几乎是正确的-如果您在Python REPL中检查help(反转),您会发现它返回了一个迭代器,该迭代器包含基于dict值的排序结果。


1
投票

最少更改您的代码:


1
投票

要计算字符串中的单词,您可以简单地使用Counter中的collections。然后按计数的降序对其进行排序。

© www.soinside.com 2019 - 2024. All rights reserved.