为了账号安全,请及时绑定邮箱和手机立即绑定

按出现次数对列表进行排序并删除重复项

按出现次数对列表进行排序并删除重复项

幕布斯6054654 2021-09-25 16:49:14
例如,我有以下列表,其中每个元素的出现次数是:apple - 3banana - 4orange - 2列表:["apple", "apple", "banana", "orange", "orange", "banana", "banana", "apple", "banana"]我需要按流行度对列表进行排序而没有重复,因此预期结果将是:["banana", "apple", "orange"]我想创建一个以每个元素为键的字典,遍历列表,然后在每次找到键时添加 +1,所以我最终会得到一个示例字典:dic = {"apple": 3, "banana": 4, "orange":2}但是有点卡住了如何在没有欺骗的情况下对列表本身进行排序..提前致谢。编辑:谢谢大家,我不知道计数器。节日快乐!
查看完整描述

3 回答

?
陪伴而非守候

TA贡献1757条经验 获得超8个赞

您可以使用 acollections.Counter及其most_common方法:


from collections import Counter


lst = ["apple", "apple", "banana", "orange", "orange", "banana", "banana", "apple", "banana"]


res = [k for k, _ in Counter(lst).most_common()]

# ['banana', 'apple', 'orange']


查看完整回答
反对 回复 2021-09-25
?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

使用计数器:


from collections import Counter


data = ["apple", "apple", "banana", "orange", "orange", "banana", "banana", "apple", "banana"]


counts = Counter(data)

result = sorted(counts, key=counts.get, reverse=True)

print(result)

输出


['banana', 'apple', 'orange']


查看完整回答
反对 回复 2021-09-25
?
慕斯709654

TA贡献1840条经验 获得超5个赞

根据原始列表的计数对集合进行排序。编辑:正如评论中所指出的,如果您有很多候选人,您可能想要使用其他解决方案,多次调用列表的计数方法不是最佳选择。


a = ["apple", "apple", "banana", "orange", "orange", "banana", "banana", "apple", "banana"]

sorted(set(a), key = lambda x: a.count(x), reverse = True) #reverse for descending

结果:


['banana', 'apple', 'orange']


查看完整回答
反对 回复 2021-09-25
  • 3 回答
  • 0 关注
  • 207 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信