Python如何校验字典列表中up/down配对的顺序及冗余条目?
问题分析
原有代码存在三处逻辑缺陷,导致输出不符合预期:
- 多余down的判断条件写反:循环结束后
list_up为空仅代表所有up都完成匹配,此时如果down的总数量多于up才属于多余down;如果list_up不为空反而代表存在up未找到对应down - 匹配失败时没有区分「顺序错误的有效down」和「无对应up的多余down」,会误打印多余down
- 没有处理
list_up为空时遇到down的边界情况,会出现索引报错
可直接运行的修改后代码
a = [{'post':'up', 'address':1, 'index':96}, {'post':'up', 'address':1, 'index':97}, {'post':'up', 'address':1, 'index':98}, {'post':'down', 'address':1, 'index':96}, {'post':'down', 'address':1, 'index':98}, {'post':'down', 'address':1, 'index':97}, {'post':'down', 'address':1, 'index':99}] list_up = [] extra_down_found = False for item in a: if item['post'] == 'up': list_up.append(item) else: # 处理up已经全部匹配完还出现down的情况 if not list_up: extra_down_found = True continue # 和队首待匹配up校验 expected_up = list_up[0] if expected_up['address'] == item['address'] and expected_up['index'] == item['index']: list_up.pop(0) else: # 区分是顺序错误还是多余down has_match = any(u['address'] == item['address'] and u['index'] == item['index'] for u in list_up) if has_match: # 存在对应up但顺序错误,打印 print(item) else: # 无对应up,属于多余down extra_down_found = True # 输出多余down提示 if extra_down_found: print('存在多余的down条目')
运行结果
{'post': 'down', 'address': 1, 'index': 98} 存在多余的down条目
完全匹配你的预期输出要求。
内容的提问来源于stack exchange,提问作者Stack Vau
相关产品推荐
相关产品推荐

