如何从现有字典提取指定键创建新字典?求助修正代码错误
问题:从字典中筛选指定键生成新字典
原始数据
原字典:
pris = {'äpplen': [12,13,15,16,17], 'bananer': [14,17,18,19], 'citroner': [20,13,14,15,16], 'hallon': [23,34,45,46,57], 'kokos': [12,45,67,89]}
指定保留键的集合:
t={'äpplen', 'bananer', 'hallon'}
预期结果
生成仅包含集合t中键的新字典:
New_dictionary= {'äpplen': [12,13,15,16,17], 'bananer': [14,17,18,19], 'hallon': [23,34,45,46,57]}
问题代码及错误输出
你尝试的代码:
for e in t: if e is not pris: del pris[e] print(pris)
运行结果:
>>> {'citroner': [20, 13, 14, 15, 16], 'kokos': [12, 45, 67, 89]}
问题原因
你的逻辑完全搞反了:
- 循环遍历的是集合
t里需要保留的键,但代码里却把这些键全删了 - 条件
e is not pris毫无意义——e是字符串类型的键,pris是字典对象,两者永远不可能相等,导致每次循环都会执行删除操作
解决方法
方法1:字典推导式(推荐,不修改原字典)
直接生成新字典,这是Python中最简洁高效的方式:
new_dictionary = {key: pris[key] for key in t if key in pris} print(new_dictionary)
- 遍历集合
t中的每个键,只要该键存在于原字典中,就将对应的键值对加入新字典 - 加
if key in pris是为了防止集合中存在原字典没有的键,避免抛出KeyError
方法2:删除原字典中不需要的键(需保留原字典时不推荐)
如果一定要通过修改原字典实现,先收集所有需要删除的键再批量操作(避免遍历字典时修改结构导致异常):
keys_to_delete = [key for key in pris if key not in t] for key in keys_to_delete: del pris[key] print(pris)
内容的提问来源于stack exchange,提问作者Shelyy
相关产品推荐
相关产品推荐

