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

如何从现有字典提取指定键创建新字典?求助修正代码错误

问题:从字典中筛选指定键生成新字典

原始数据

原字典:

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 02:50:56