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

Python特定格式字典实现求助:已查同类问题未获解决方案

嘿,我明白你想要生成那种键为单词、值为对应出现位置(比如行号)列表的字典对吧?先把你给出的两个示例明确出来,方便对照:

第一个字典:

{'apple': ['5', '65'], 'blue': ['9', '10', '15', '43'], 'is': ['5', '6', '13', '45', '96'], 'yes': ['1', '2', '3', '11'], 'zone': ['5', '6', '9', '10', '12', '14', '18', '19', '29', '45']}

第二个字典:

{'apple': ['43'], 'appricote': ['1', '2', '3', '4', '5', '6'], 'candle': ['1', '2', '4', '5', '6', '9'], 'delta': ['14', '43', '47'], 'dragon': ['...']}

这类字典通常用来统计单词在文本中的出现位置(比如行号、字符索引),我给你一个通用的生成方案,你可以根据自己的数据源调整:

方案:从文本文件生成单词-位置列表字典

假设你的数据源是文本文件,每行是一段内容,我们要统计每个单词出现在哪些行(行号从1开始):

def build_word_position_dict(file_path):
    word_positions = {}
    with open(file_path, 'r', encoding='utf-8') as f:
        for line_num, line in enumerate(f, start=1):
            # 预处理:去掉标点、转小写(按需调整)
            words = line.strip().lower().split()
            for word in words:
                # 清理单词前后的标点符号
                cleaned_word = word.strip('.,!?;:')
                if cleaned_word not in word_positions:
                    word_positions[cleaned_word] = []
                # 记录行号并转成字符串,和示例格式匹配
                word_positions[cleaned_word].append(str(line_num))
    return word_positions

# 生成第一个目标字典
dict1 = build_word_position_dict('your_first_source.txt')
# 生成第二个目标字典
dict2 = build_word_position_dict('your_second_source.txt')

自定义调整点

  • 如果你的数据源是内存中的字符串列表,把enumerate(f, start=1)换成enumerate(your_string_list, start=1)即可。
  • 不需要统一小写的话,删掉.lower()就行。
  • 要是想统计字符索引而非行号,需要遍历每个字符的位置,拆分单词时记录起始/结束索引。
  • 同一行多次出现的单词只记录一次行号?可以加个判断:
    if str(line_num) not in word_positions[cleaned_word]:
        word_positions[cleaned_word].append(str(line_num))
    

要是你是从其他数据源生成这类字典,或者有特殊格式要求,随时说细节,我再帮你优化代码!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:18:18