如何用Python的defaultdict实现预定义类型字典值及单词查询?
使用Python的defaultdict解决单词索引查询问题
defaultdict核心特性
defaultdict是Python标准库collections中的容器,和普通字典(dict)功能类似,核心优势在于未定义的键会自动生成预定义类型的默认值,无需手动检查键是否存在再初始化,能大幅简化代码逻辑。
任务实现方案
1. 创建带预定义数据类型的defaultdict
只需导入collections模块后,指定值的类型作为参数传入即可。比如要创建值为列表的字典(用来存储索引):
from collections import defaultdict # 值默认是空列表的defaultdict word_index_map = defaultdict(list)
对比普通字典,不用写if word not in word_index_map: word_index_map[word] = []这种判断,直接对任意键执行append操作即可。
2. 单词索引查询实现
需求:给定两组单词A(含n个可重复单词)、B(含m个单词),查询B中每个单词在A中的所有出现索引,未出现则输出-1。
完整代码实现:
from collections import defaultdict # 初始化存储单词索引的defaultdict word_index_map = defaultdict(list) # 读取输入的n和m n, m = map(int, input().split()) # 读取单词组A word_list_A = input().split() # 遍历A,记录每个单词的出现索引(索引从1开始,若需要0起始则去掉start=1) for idx, word in enumerate(word_list_A, start=1): word_index_map[word].append(str(idx)) # 转字符串方便后续拼接输出 # 处理单词组B的查询请求 word_list_B = input().split() for word in word_list_B: # 直接通过键访问,存在则输出索引,否则输出-1 print(' '.join(word_index_map[word]) if word in word_index_map else -1)
代码说明:
- 用
enumerate遍历A时指定start=1,符合多数编程题的索引习惯,若需Python原生0起始索引,去掉该参数即可。 - 把索引转成字符串是为了后续用
' '.join()直接拼接成空格分隔的输出格式,避免类型错误。
内容的提问来源于stack exchange,提问作者Deeya
相关产品推荐
相关产品推荐

