我有排序元组列表的代码:
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的整数值排序。在
reversed
和sorted
不进行适当的排序;而是返回新排序并反转的对象。将倒数第二行改为它会起作用的。
list
调用是因为reversed
返回的是迭代器而不是列表(至少在Python3上)。在执行以下操作可能不那么冗长
^{pr2}$这几乎是正确的-如果您在Python REPL中检查help(reversed),您会发现它返回一个迭代器,其中包含基于dict值的排序结果。在
如果希望z在计数时存储更新的、反向排序的列表,则需要重新分配z:
Edit:为了澄清一下,迭代器对象的最外层列表转换将迭代器“转换”为迭代器内部包含的对象列表。在
对于就地排序,应该使用
z.sort()
。在如果坚持使用
sorted
,则将该值发送回z
。在所以,用其中一种
或者
^{pr2}$或者,更复杂的解决方案可以是:
事实上,使用
collections.Counter()
可以更容易地得到最终结果按两个多个键进行排序是可以的,可以将它们作为元组传递。在您的情况下,解决方案是:
输出:
相关问题 更多 >
编程相关推荐