求助:如何从字典列表中删除redcap_event_name等三个指定键
如何从字典列表中移除指定键?
首先,你的代码没起作用主要有两个核心问题:
- 判断对象错误:你在代码里判断
j == 'preliminary_arm_1',但这是redcap_event_name对应的值,而你要删除的是redcap_event_name这个键本身,完全找错了目标。 - 删除操作错误:
del j只是删除了循环中的临时变量j,并没有对字典本身进行修改——要删除字典里的键,必须直接操作字典对象(也就是循环里的k)。
正确的解决方法
先明确要删除的三个键,然后遍历字典列表中的每个字典,逐个移除这些键:
步骤1:定义要删除的键列表
keys_to_remove = ['redcap_event_name', 'redcap_repeat_instrument', 'redcap_repeat_instance']
步骤2:遍历并删除键
有两种安全可靠的方式:
方式一:检查键存在后删除(避免KeyError)
先确认键在字典中存在,再执行删除操作,防止出现键不存在的报错:
for item in mydict: for key in keys_to_remove: if key in item: del item[key]
方式二:使用dict.pop()(无需检查,不存在时不会报错)
pop()方法的第二个参数是默认值,当键不存在时会返回这个值,不会抛出异常,代码更简洁:
for item in mydict: for key in keys_to_remove: item.pop(key, None)
处理后的结果
执行上述代码后,你的mydict会变成:
[{'id': '450118', 'date_today': '2022-11-04', 'timestamp': '2022-11-04 10:49', 'doc_source': '1', 'hosp_id': '45', 'study_id': '18', 'participant_name': 'CHAR WA WAN', 'ipno': '141223', 'dob': '2020-06-30'}, {'id': '450118', 'date_today': '2022-11-04', 'timestamp': '2022-11-04 10:49', 'doc_source': '1', 'hosp_id': '45', 'study_id': '01118', 'participant_name': 'CHARIT', 'ipno': '1413', 'dob': '2020-06-30'}]
这样就保留了原字典列表的结构,同时精准移除了你指定的三个键。
内容的提问来源于stack exchange,提问作者LivingstoneM
相关产品推荐
相关产品推荐

