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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 09:10:35