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

如何用原生Python不借助第三方库统计文件Top10高频姓氏

问题排查与实现方案

现有代码核心问题

  • 变量类型不匹配:你将surname_dict定义为列表类型,却在后续调用了字典专属的items()方法,运行会直接抛出属性错误。同时当前逻辑仅收集了去重后的姓氏列表,完全没有统计每个姓氏的出现频次,后续排序没有数据依据。
  • 计数逻辑混乱:第一个循环中count变量的作用是统计不重复姓氏的总数,第二个循环复用该变量控制输出次数时,初始值已经不是0,无法准确只输出前10条结果。
  • 排序规则错误:默认sorted是升序排序,要取频次最高的前10,需要设置倒序排列,否则输出的是频次最低的结果。

正确实现方案

不需要引入任何第三方库,仅用原生Python字典和排序即可完成20万条数据的统计,性能足够。

实现代码

# 初始化频次统计字典,key是姓氏,value是出现次数
surname_count = {}
# 你的姓氏白名单样本
valid_surnames = ['KRISTIANSEN', 'OLDERVIK', 'GJERSTAD', 'VESTLY SKIVIK', 'NYMANN', 'ØSTBY', 'LINNERUD', 'REMLO', 'SKARSHAUG', 'ELI', 'ADOLFSEN']

# 遍历数据统计频次
for item in data_list:
    lastname = item["lastname"]
    # 如果只需要统计你提供的样本姓氏,保留下面这行判断,不需要可以直接删除
    if lastname not in valid_surnames:
        continue
    # 频次累加逻辑
    if lastname in surname_count:
        surname_count[lastname] += 1
    else:
        surname_count[lastname] = 1

# 按频次倒序排序
sorted_surnames = sorted(surname_count.items(), key=lambda x: x[1], reverse=True)

# 输出前10个高频姓氏
for idx, (name, count) in enumerate(sorted_surnames):
    if idx >= 10:
        break
    print(f"姓氏:{name},出现次数:{count}")

可选优化说明

如果后续数据规模继续扩大,可以在统计频次阶段就维护一个固定长度的前10列表,无需全量统计完成后再排序,可进一步降低内存开销,20万条数据规模下当前方案性能完全够用。

内容的提问来源于stack exchange,提问作者Nicholai Mørch Rindarøy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 00:15:01