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

Python实现单词与对应笔记ID映射及现有代码质量优化咨询

解答

1. 生成单词与笔记ID映射列表的实现方案

不需要依赖已生成的word_list,可以直接遍历note_list一次性完成词频统计和笔记ID映射,代码如下:

import re
from collections import defaultdict

# 初始化映射存储,用set自动去重同一个笔记中多次出现的同个单词
word_note_ids = defaultdict(set)
word_freq = defaultdict(int)

for note in note_list:
    current_id = note["note_id"]
    # 统一转小写,同时提取纯单词自动过滤标点、特殊符号
    words = re.findall(r"\b[a-zA-Z]+\b", note["note_txt"].lower())
    for word in words:
        word_freq[word] += 1
        word_note_ids[word].add(current_id)

# 转换成你需要的目标结构
maped_list = [
    {"word": word, "notes_ids": sorted(list(ids))} 
    for word, ids in word_note_ids.items()
]
# 按出现的笔记数量倒序排列,和你给出的示例顺序一致
maped_list.sort(key=lambda x: len(x["notes_ids"]), reverse=True)

# 如果需要同步生成你之前的word_list,也可以直接生成
word_list = [
    {"word": word, "repeted": cnt}
    for word, cnt in word_freq.items()
]
word_list.sort(key=lambda x: x["repeted"], reverse=True)

2. 现有代码的优化建议

  • 命名规范问题:不要用dict作为变量名,它是Python内置的关键字,会覆盖原生字典类型的方法,容易引发未知bug;notes_test命名语义不清晰,建议改成all_note_text这类符合实际用途的名称;统计次数的字段名repeted拼写错误,正确拼写是repeated。
  • 语法错误问题:你现有代码中for note in note_list: 下的append行没有缩进,直接运行会抛出语法错误。
  • 单词拆分逻辑问题:用re.split('\s', sentence)仅按空格拆分单词,无法处理标点、大小写差异问题,比如笔记中的teach,会被识别为带逗号的单词,大写的Python会被判定和python是不同单词,和你的示例结果不匹配,建议用re.findall提取纯单词+统一转小写处理。
  • 代码简洁度问题:用try-except捕获KeyError统计词频是可行的,但用collections.defaultdict可以省略异常捕获的逻辑,代码更简洁易读。
  • 效率问题:你现有代码分两次遍历(第一次收集所有笔记文本、第二次统计词频),如果后续还要生成映射需要第三次遍历,数据量大的时候性能损耗明显,建议直接单次遍历note_list同时完成所有统计逻辑。
  • 代码简化问题:最终生成word_list的循环可以替换为列表推导式,减少冗余代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 03:15:02