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

Python中为何无法为每个单词生成独立的字典?

问题原因及解决方案

这是Python新手很容易踩的一个坑!问题出在你初始化列表的这行代码:

list1 = [{}] * len(words)

为什么所有字典都完全一样?

当你用[{}] * n的方式创建列表时,Python并不会生成n个独立的空字典——它只是创建了一个包含同一个字典对象的n个引用的列表。也就是说,list1[0]、list1[1]、list1[2]其实指向的是内存里的同一个字典,不管你循环修改哪个索引对应的字典,都是在改动同一个底层对象,最后打印出来的自然是三个完全相同的结果。

正确的实现方式

你需要确保列表里的每个元素都是独立的新字典,这里有两种简单的解决办法:

方法一:使用列表推导式(推荐)

列表推导式会在每次循环时生成一个新的空字典,保证每个元素都是独立的:

words = ["bella","label","roller"]
list1 = [{} for _ in words]  # 每次迭代都创建新的空字典
for i in range(len(words)):
    for letter in words[i]:
        list1[i][letter] = 0
print(list1)

方法二:在循环内创建新字典

这种写法更直观,每次处理一个单词时就新建一个字典,完成后再添加到列表中:

words = ["bella","label","roller"]
list1 = []
for word in words:
    word_dict = {}  # 为每个单词创建独立的字典
    for letter in word:
        word_dict[letter] = 0
    list1.append(word_dict)
print(list1)

运行结果

两种方法都会输出符合预期的独立字典列表(Python 3.7+字典会保留插入顺序,所以不同单词的字典键顺序会和字母出现顺序一致):

[{'b': 0, 'e': 0, 'l': 0, 'a': 0}, {'l': 0, 'a': 0, 'b': 0, 'e': 0}, {'r': 0, 'o': 0, 'l': 0, 'e': 0}]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 16:37:28