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

Python Counter的most_common()返回结果异常,是否为Python本身的Bug?

核心原因

你遇到的不是Counter或者csv模块的逻辑问题,是双向文本渲染导致的视觉错觉:

  • Counter.most_common()的返回值永远符合官方定义的(元素, 计数)顺序,你直接取counter.most_common()[0][0]得到关键词就已经证明了内存中数据的顺序完全正确。
  • 你使用的关键词تمباکو属于波斯语,是典型的RTL(从右向左书写)文本。当你用Excel、WPS表格这类默认支持双向文本排版的软件打开CSV时,软件会自动调整RTL文本所在行的显示顺序,让你视觉上以为计数在第一列、关键词在第二列,实际文件中存储的顺序并没有反转。
验证方案

你可以直接用Python读取你已经生成的CSV文件,打印每行内容就能确认存储顺序是正确的:

import csv
# 替换为你的CSV文件路径
with open("test.csv", "r", encoding="utf-8") as f:
    reader = csv.reader(f)
    for row in reader:
        print(row)
        # 输出结果会是 ['تمباکو', '1'],和你写入的顺序完全一致
修复办公软件显示顺序的方法

如果需要在Excel等软件中打开时也显示为「关键词在前、计数在后」的顺序,可以在写入时给RTL文本前添加左向控制符\u200E,强制软件按照从左到右的顺序渲染行内容,示例代码如下:

from collections import Counter
import csv

counter = Counter()
counter["تمباکو"] = 1
processed_data = [("\u200E" + key, count) for key, count in counter.most_common()]

# 用utf-8-sig编码避免Excel打开时出现小语种乱码
with open("output.csv", "w", encoding="utf-8-sig", newline="") as f:
    writer = csv.writer(f)
    writer.writerows(processed_data)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 22:36:03