为什么我的代码中的默认字典不断扩展?
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
是一个整数,并且您的字典最初只填充字符串作为键,这将为每个 key
在 dummydict
中创建一个新值。
如 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]
之类的操作,这会添加这些键。
我有一个默认字典,我 运行 它通过几个循环来查找字典中的特定字符串。循环并没有真正将任何内容附加到字典中,但事实证明,在循环期间,新项目不断附加到字典中,最终的字典最终比循环之前的原始字典大。 我一直试图找出错误,但现在已经晚了,我不知道是什么原因造成的!
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
是一个整数,并且您的字典最初只填充字符串作为键,这将为每个 key
在 dummydict
中创建一个新值。
如 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]
之类的操作,这会添加这些键。