为什么我的代码中的默认字典一直在扩展?

2024-05-15 23:33:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个默认字典,我通过几个循环来查找字典中的某些字符串。循环实际上并没有向字典中添加任何内容,因为在循环过程中,新的条目不断地添加到字典中,最终的字典比循环之前的原始字典大。 我一直试图找出错误,但现在已经晚了,我不知道是什么原因造成的

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)

我希望这本词典保持不变


Tags: andkeyinforlen字典varcar
3条回答

访问dummydict[key]中丢失的键将把这些键添加到defaultdict中。请注意,keyint,而不是该位置的值,因为for key in range(len(dummydict))迭代索引,而不是dict或其键

参见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,其中包含一个值,因为只要访问dummydict[key]就会将该键添加到dict中,如果该键还不存在

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

print (dummydict)

输出:

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

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

if car in dummydict[key]:

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

相关问题 更多 >