You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何基于元组列表构建以词干为键、对应衍生词列表为值的字典?

解决词干到单词列表的字典转换问题

我来帮你搞定这个需求!你的目标是把一个包含(单词, 词干)的元组列表,转换成以词干为键、对应单词列表为值的字典。原来的代码逻辑有几个关键问题,我一步步给你梳理并修正:

原代码的问题分析

  • 遍历方式错误:你用for index, tuple in tuple_list会把每个元组的第一个元素当成index,第二个当成tuple,但实际上每个元组是(单词, 词干),应该拆成word, stem来遍历。
  • 无意义的判断if tuple == same_words这段完全无效——你既没定义same_words,也不是判断词干是否存在字典里的正确方式。
  • 字典操作错误:字典不能用+=来添加元素,得针对键来操作列表。

正确实现方式

方式一:基础循环判断

这是最直观的写法,手动处理键的存在性:

# 示例输入
tuple_list = [('remarkably','remark'),('prevented','prevent'), 
              ('achieved','achiev'), ('achieve','achiev'),
              ('accidentally','accident'), ('accidental','accident')]

stem_dict = {}
for word, stem in tuple_list:
    # 检查词干是否已在字典中
    if stem in stem_dict:
        # 存在则追加单词到对应列表
        stem_dict[stem].append(word)
    else:
        # 不存在则新建键值对,值为包含当前单词的列表
        stem_dict[stem] = [word]

print(stem_dict)

运行后会得到你想要的输出:

{'remark': ['remarkably'], 'prevent': ['prevented'], 'achiev': ['achieved', 'achieve'], 'accident': ['accidentally', 'accidental']}

方式二:用collections.defaultdict简化代码

如果不想手动判断键是否存在,可以用Python标准库的defaultdict,它会自动为不存在的键创建空列表:

from collections import defaultdict

# 示例输入
tuple_list = [('remarkably','remark'),('prevented','prevent'), 
              ('achieved','achiev'), ('achieve','achiev'),
              ('accidentally','accident'), ('accidental','accident')]

stem_dict = defaultdict(list)
for word, stem in tuple_list:
    # 直接追加,无需判断键是否存在
    stem_dict[stem].append(word)

# 可选:如果需要转换成普通字典(defaultdict是dict的子类,大部分场景不需要转换)
stem_dict = dict(stem_dict)

print(stem_dict)

这种写法更简洁,适合处理这类需要自动初始化值的字典场景。

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

火山引擎 最新活动