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

Python列表单词频次统计生成字典列表:代码输出不符预期求助

问题排查:字符串频次统计代码错误分析

需求说明

统计列表中每个唯一字符串的出现频次,整理为字典列表,每个字典以目标字符串为键、对应频次为值。

示例

输入:

word_list=["I","am","bob","I","am","hungry"]

预期输出:

dict_list=[{"I":2},{"am":2},{"bob":1},{"hungry":1}]

错误代码及输出

编写的代码运行结果与预期不符:

word_list=["I","am","bob","I","am","hungry"]
dict_list=[{"placeholder":0}]

for word in word_list:
    for i in range(len(dict_list)):
        if word not in dict_list[i].keys():
            dict_list.append({word:1})
            break
        elif word in dict_list[i].keys():
            dict_list[i][word]+=1
            break

dict_list.pop(0)
print(dict_list)

# 输出结果:[{'I': 1}, {'am': 1}, {'bob': 1}, {'I': 1}, {'am': 1}, {'hungry': 1}]
# 预期结果:[{"I":2},{"am":2},{"bob":1},{"hungry":1}]

问题原因

代码逻辑的核心错误在于:每次处理单词时,只检查列表中的第一个字典是否包含当前单词。如果第一个字典里没有该单词,就直接新增一个新字典,完全没去检查列表中后续已存在的其他字典。

比如处理第二个"I"时,程序会先检查初始的{"placeholder":0}字典,发现"I"不在其中,就直接追加一个新的{"I":1}字典,而不是去列表后面找已经存在的{"I":1}字典进行计数累加。这就导致了相同键的字典被重复创建。

修正方案

需要先遍历整个字典列表,确认当前单词是否已经存在于任何一个字典中。如果存在就累加计数,遍历完所有字典都没找到的情况下,再新增对应的字典。

修正后的代码

word_list=["I","am","bob","I","am","hungry"]
dict_list = []

for word in word_list:
    # 标记是否找到已存在的单词字典
    found = False
    for item in dict_list:
        if word in item:
            item[word] += 1
            found = True
            break
    # 如果没找到,新增字典
    if not found:
        dict_list.append({word: 1})

print(dict_list)
# 输出:[{'I': 2}, {'am': 2}, {'bob': 1}, {'hungry': 1}]

更简洁的实现(可选)

可以先用普通字典统计频次,再转换成要求的字典列表,效率更高:

word_list=["I","am","bob","I","am","hungry"]
count_dict = {}

# 先统计频次
for word in word_list:
    count_dict[word] = count_dict.get(word, 0) + 1

# 转换成字典列表
dict_list = [{k: v} for k, v in count_dict.items()]

print(dict_list)
# 输出:[{'I': 2}, {'am': 2}, {'bob': 1}, {'hungry': 1}]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 00:50:16