按频率排序计数器,然后在 Python 中按字母顺序排序

新手上路,请多包涵

我正在尝试使用计数器按出现次数对字母进行排序,并将任何具有相同频率的字母按字母顺序排列,但我无法访问它生成的字典的值。

 letter_count = collections.Counter("alphabet")
print(letter_count)

产生:

 Counter({'a': 2, 'l': 1, 't': 1, 'p': 1, 'h': 1, 'e': 1, 'b': 1})

我怎样才能让它按频率排序,然后按字母顺序排列,所以只出现一次的所有东西都是按字母顺序排列的?

原文由 iFunction 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 710
2 个回答

听起来您的问题是如何按频率对整个列表进行排序,然后按字母顺序打破平局。您可以像这样对 整个列表 进行排序:

 >>> a = sorted(letter_count.items(), key=lambda item: (-item[1], item[0]))
>>> print(a)
# [('a', 2), ('b', 1), ('e', 1), ('h', 1), ('l', 1), ('p', 1), ('t', 1)]

如果您希望输出仍然是字典,您可以将其转换为 collections.OrderedDict

 >>> collections.OrderedDict(a)
# OrderedDict([('a', 2),
#              ('b', 1),
#              ('e', 1),
#              ('h', 1),
#              ('l', 1),
#              ('p', 1),
#              ('t', 1)])

如您所见,这保留了顺序。 'a' 是第一个,因为它最常见。其他一切都按字母顺序排序。

原文由 Arya McCarthy 发布,翻译遵循 CC BY-SA 3.0 许可协议

您可以在将输入传递给计数器之前对其进行排序。

 >>> Counter(sorted("alphabet")).most_common()
[('a', 2), ('b', 1), ('e', 1), ('h', 1), ('l', 1), ('p', 1), ('t', 1)]

原文由 sabacherli 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题