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

Python代码为何生成重复子列表而非合并统计频次?求助

问题分析与解决:单词类别统计错误修正

问题背景

我们从一个包含单词和对应类别的字符串出发,先将其转换为二维列表:

cadena ="El/DT perro/N come/V carne/N de/P la/DT carnicería/N y/C de/P la/DT nevera/N y/C canta/V el/DT la/N la/N la/N ./Fp"

# 将字符串转为二维列表
cadena_list = []
for i in cadena.split():
    cadena_list.append(i.split("/"))

目标是构建一个字典words_categories,键为单词,值是二维列表,每个子列表存储[类别, 出现次数]。比如单词"la"的预期结果是:{"la": [["DT", 2], ["N", 3]]}

但当前编写的代码运行后,输出words_categories["la"]得到:['DT', 2, ['N', 1], ['N', 1], ['N', 1]],无法合并相同类别的统计次数。

错误原因

你的代码存在两个核心问题:

  • 初始值格式错误:当单词首次存入字典时,你赋值的是[cadena_list[i][1], 1],这是一个一维列表(类别字符串+数字),但预期的是二维列表(每个元素是子列表)。比如"la"第一次存入时是["DT", 2],而非[["DT", 2]]。
  • 类别存在性判断错误:你用cadena_list[i][1] in l来判断类别是否存在,但l此时是混合结构(比如["DT",2]),这里的判断是检查类别字符串是否在列表的顶层元素中,而不是检查子列表里的类别。当后续遇到"N"类别时,判断会认为不存在,于是不断追加新的["N",1]子列表,而非找到已有类别累加次数。

修正后的代码

基础修正版本

words_categories = {}
for word, cat in cadena_list:
    if word in words_categories:
        # 遍历当前单词的类别列表,检查是否已有该类别
        found = False
        for item in words_categories[word]:
            if item[0] == cat:
                item[1] += 1
                found = True
                break
        if not found:
            words_categories[word].append([cat, 1])
    else:
        # 首次存入时直接用二维列表格式
        words_categories[word] = [[cat, 1]]

print(words_categories["la"])

高效优化版本

如果数据量较大,推荐用嵌套字典先统计次数,再转换为二维列表,利用字典键的唯一性自动合并类别,代码更简洁高效:

words_categories = {}
for word, cat in cadena_list:
    if word not in words_categories:
        words_categories[word] = {}
    # 统计每个单词下各类别的次数
    words_categories[word][cat] = words_categories[word].get(cat, 0) + 1

# 将嵌套字典转换为要求的二维列表格式
for word in words_categories:
    words_categories[word] = [[cat, count] for cat, count in words_categories[word].items()]

print(words_categories["la"])

验证结果

运行上述修正代码后,words_categories["la"]的输出为:

[['DT', 2], ['N', 3]]

完全符合预期。

内容的提问来源于stack exchange,提问作者Luca P.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 15:06:07