为什么我的代码中的默认字典不断扩展?

Why does the default dictionary in my code keep expanding?

我有一个默认字典,我 运行 它通过几个循环来查找字典中的特定字符串。循环并没有真正将任何内容附加到字典中,但事实证明,在循环期间,新项目不断附加到字典中,最终的字典最终比循环之前的原始字典大。 我一直试图找出错误,但现在已经晚了,我不知道是什么原因造成的!

from collections import defaultdict
dummydict = defaultdict(list)    
dummydict['Alex'].append('Naomi and I love hotcakes')
dummydict['Benjamin'].append('Hayley and I hate hotcakes')
part = ['Alex', 'Benjamin', 'Hayley', 'Naomi']
emp = []
for var in dummydict:
    if 'I' in dummydict[var]:
        emp.append(var)
for car in part:
    for key in range(len(dummydict)):
        print('new len', len(dummydict))
        print(key, dummydict)
        if car in dummydict[key]:
            emp.append(car)
print(emp)
print('why are there new values in the dictionary?!', len(dummydict), dummydict)

我希望字典保持不变。

if car in dummydict[key]:

key 是一个整数,并且您的字典最初只填充字符串作为键,这将为每个 keydummydict 中创建一个新值。

dummydict[key] 那样访问缺失的键会将这些键添加到 defaultdict 中。请注意,key 是一个 int,而不是那个位置的值,因为 for key in range(len(dummydict)) 迭代索引,而不是字典或其键。

参见docs

When each key is encountered for the first time, it is not already in the mapping; so an entry is automatically created using the default_factory function which returns an empty list.

例如,此代码将显示一个包含值的虚拟字典,因为如果该键不存在,只需访问 dummydict[key] 即可将键添加到字典中。

from collections import defaultdict
dummydict = defaultdict(list)    
dummydict[1]

print (dummydict)

输出:

defaultdict(<class 'list'>, {1: []})

您的问题是在您的循环中,您执行了 dummydict[key]dummydict[var] 之类的操作,这会添加这些键。