文本循环处理:构建含重复关联值的字典实现求助
搞定你的关联字典构建需求
嘿,我明白你要做什么了——就是要建一个字典,左边的词当键,每个键对应一堆关联词(还得保留重复的,比如word1要对应[word7, word11, word11]),而且每个左边的词只处理一次,不能重复折腾对吧?
先说说你原来的问题:大概率是代码没写完(比如文件路径没补全),或者处理逻辑没搞对(比如不小心用了集合去重,或者没正确收集重复值)。下面给你一个完整的可运行方案,适配你的需求:
假设你的输入文件格式
先默认你的输入文件input.txt是每行一对词,比如:
word1 word7
word1 word11
word1 word11
word2 word8
word2 word12
如果你的文件格式不一样,后面我会说怎么调整。
修正后的完整代码
from collections import defaultdict def build_word_association_dict(file_path): # 用defaultdict自动给新键初始化空列表,省得手动判断 word_map = defaultdict(list) # 用with语句读文件,自动关闭,避免资源泄漏 with open(file_path, 'r', encoding='utf-8') as input_file: for line in input_file: # 去掉换行和空格,拆分成左右两个词 line_parts = line.strip().split() # 跳过格式不对的行(比如不是两个词的) if len(line_parts) != 2: continue left_word, right_word = line_parts # 直接把关联词追加到对应键的列表里,重复的也会保留 word_map[left_word].append(right_word) # 可选:把defaultdict转成普通字典,不转也能用 return dict(word_map) # 调用示例,把"input.txt"换成你的实际文件路径 my_association_dict = build_word_association_dict("input.txt") print(my_association_dict)
关键细节解释
- 保留重复值:用列表(
list)存关联词,而不是集合(set),这样重复的word11会被保留下来 - 不重复处理键:
defaultdict会自动处理——第一次遇到word1时创建键并初始化列表,之后再遇到word1,直接往列表里加新的关联词,不会重复创建键或者重置列表 - 安全读文件:用
with语句打开文件,不用手动写close(),避免忘记关闭文件导致的问题
如果你的输入格式不一样怎么办?
比如如果你的文件是用逗号分隔的(word1,word7),就把split()改成split(',');如果是其他复杂格式,只要调整拆分每行的逻辑,把左侧词和右侧词拆出来就行。
内容的提问来源于stack exchange,提问作者user9570622
相关产品推荐
相关产品推荐

