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
相关产品推荐
相关产品推荐

