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

Python:统计字典列表重复条目并按元组规则排序输出的问题

问题

我有一个字典列表,需求如下:

  • 统计列表中唯一条目的出现次数;
  • 根据键"corrected_word"对应的元组中的数值(排序规则为2 < 3 < 33)对结果进行排序;
  • 将统计的次数添加到corrected_word的元组末尾,输出指定格式的字典列表。

示例输入

mylist = [
{'original_word': 'test1', 'corrected_word': ('test12', 3)},
{'original_word': 'test1', 'corrected_word': ('test12', 3)},
{'original_word': 'test2', 'corrected_word': ('test22', 2)},
{'original_word': 'test3', 'corrected_word': ('test3', 33)},
{'original_word': 'test3', 'corrected_word': ('test3', 33)},
{'original_word': 'test3', 'corrected_word': ('test3', 33)}
]

预期输出

mylist = [
{'original_word': 'test2', 'corrected_word': ('test22', 2, 1)},
{'original_word': 'test1', 'corrected_word': ('test12', 3, 2)},
{'original_word': 'test3', 'corrected_word': ('test3', 33, 3)}
]

我尝试了以下代码,但无法返回目标格式的字典列表:

from collections import Counter
Counter([str(i) for i in mylist])

解决方案

核心思路

直接将字典转字符串统计的方式无法保留原结构,我们需要以original_word和corrected_word作为唯一标识统计次数,再按规则排序并重构字典。

完整实现代码

from collections import Counter

mylist = [
{'original_word': 'test1', 'corrected_word': ('test12', 3)},
{'original_word': 'test1', 'corrected_word': ('test12', 3)},
{'original_word': 'test2', 'corrected_word': ('test22', 2)},
{'original_word': 'test3', 'corrected_word': ('test3', 33)},
{'original_word': 'test3', 'corrected_word': ('test3', 33)},
{'original_word': 'test3', 'corrected_word': ('test3', 33)}
]

# 1. 统计唯一条目出现次数:用(original_word, corrected_word)作为统计键
counts = Counter((item['original_word'], item['corrected_word']) for item in mylist)

# 2. 按corrected_word元组的数值排序
sorted_items = sorted(counts.keys(), key=lambda x: x[1][1])

# 3. 构造最终结果:将次数追加到corrected_word元组末尾
result = []
for orig_word, corr_word in sorted_items:
    result.append({
        'original_word': orig_word,
        'corrected_word': corr_word + (counts[(orig_word, corr_word)],)
    })

# 输出验证
for item in result:
    print(item)

代码解释

  1. 统计次数:使用Counter,把每个条目的original_word和corrected_word组合成可哈希的元组作为统计键,确保重复条目被正确计数。
  2. 排序:通过sorted函数的key参数,指定按corrected_word元组的第二个元素(即目标排序数值)排序,刚好符合2 < 3 < 33的规则。
  3. 重构结果:遍历排序后的唯一条目,将统计次数追加到corrected_word元组末尾,重新构造成目标格式的字典。

运行结果

执行代码后会输出与预期一致的字典列表:

{'original_word': 'test2', 'corrected_word': ('test22', 2, 1)}
{'original_word': 'test1', 'corrected_word': ('test12', 3, 2)}
{'original_word': 'test3', 'corrected_word': ('test3', 33, 3)}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 23:57:21