You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按值排序词频字典并保留原键的首次出现顺序?

优化词频统计与排序方案

原方案的性能问题

原代码中words.count(i)会对每个单词遍历整个列表,时间复杂度达到O(n²),文本量较大时性能会急剧下降;后续的嵌套循环和字母序排序还会破坏「同频词保留首次出现顺序」的要求。

优化实现思路

  1. 一次遍历完成双统计:遍历单词列表时,同时记录每个词的出现次数和首次出现的索引,时间复杂度仅为O(n)。
  2. 自定义排序规则:排序优先按词频降序,词频相同时按首次出现索引升序,确保同频词顺序与原文本首次出现顺序一致。
  3. 利用字典插入顺序特性:Python 3.7+的原生字典会保留插入顺序,排序后直接构造字典即可得到符合要求的输出。

代码实现

from collections import defaultdict

# 处理输入:转小写并拆分单词
words = input().lower().split()

# 统计词频和首次出现索引
freq = defaultdict(int)
first_occur = {}
for idx, word in enumerate(words):
    freq[word] += 1
    # 仅记录单词第一次出现的位置
    if word not in first_occur:
        first_occur[word] = idx

# 按规则排序:词频降序优先,同频则按首次出现顺序升序
sorted_items = sorted(freq.items(), key=lambda x: (-x[1], first_occur[x[0]]))

# 转换为结果字典(Python3.7+自动保留插入顺序)
result = dict(sorted_items)

print(result)

测试示例

输入:

Hi I live in America I love cooking

输出:

{'i': 2, 'hi': 1, 'live': 1, 'in': 1, 'america': 1, 'love': 1, 'cooking': 1}

内容的提问来源于stack exchange,提问作者Rishabh Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 00:03:14