check dicts in list and remove invalid dict
我要检查列表中的听写,其格式为:
- 应该有键:
class 、subject 、teacher 。 - 钥匙的值不能为空
但我得到了奇怪的结果:如果1
第二种情况很好
我要做的是:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | # case 1 data_list = [{'class':'A','subject':'math','teacher':'Sam'}, {'class':'','subject':'','teacher':''}, {'subject':'history','teacher':'Marry'}] # case 2 # data_list = [{'teacher': 'Marry', 'subject': 'D'}] for data in data_list: message={} message['class'] = data.get('class',required_field) or blank_field message['subject'] = data.get('subject',required_field) or blank_field message['teacher'] = data.get('teacher',required_field) or blank_field if required_field in message.values() or blank_field in message.values(): print"This dict need to be remove:{}".format(message) data_list.remove(data) print"#### final list ####" print data_list print"#### final list ####" |
案例1结果:
1 2 3 4 5 | This dict need to be remove:{'teacher': 'This_field_may_not_be_blank', 'class': 'This_field_may_not_be_blank', 'subject': 'This_field_may_not_be_blank'} #### final list #### [{'teacher': 'Sam', 'class': 'A', 'subject': 'math'}, {'teacher': 'Marry', 'subject': 'history'}] #### final list #### |
号
案例2结果:
1 2 3 4 | This dict need to be remove:{'teacher': 'Marry', 'class': 'This_field_is_required', 'subject': 'D'} #### final list #### [] #### final list #### |
AJK已经指出了代码的问题所在,但是您也可以缩短代码的长度,从而更容易理解代码。记住,如果给定的键不在dict中,字典
因此,最简单的方法是创建一个可接受条目的新列表,如下所示:
1 2 3 4 | result = [] for d in data_list: if d.get("class") and d.get("subject") and d.get("teacher"): result.append(d) |
你可以通过理解来缩短这个时间:
1 2 | result = [d for d in data_list if d.get("class") and d.get("subject") and d.get("teacher")] |
号
这是因为您不应该从使用
这里有一个类似的模块:在for循环(python)中删除列表项时出现问题
使用