Python中基于匹配模式拼接字典列表字符串的问题修正
解决Python字典列表中按规则拼接'b'值的问题
需求说明
在字典列表中对每个字典的'b'键值进行处理:
- 若字典的
'b'包含'ABC':将后续所有**不包含'ABC'**的字典的'b'值拼接到该字典的'b'字段,其余键(如'a'、'c')保留该字典的原始值;遇到下一个含'ABC'的字典时,先将当前拼接好的字典存入结果,再处理新目标 - 若字典的
'b'不包含'ABC':直接保留该字典到结果
样本数据
L = [{'a': 0, 'b': 'radndaos43', 'c': 234}, {'a': 1, 'b': 'lABChfgdd65a', 'c': 90011}, {'a': 2, 'b': 'ddasda423sdABC', 'c': 324}, {'a': 3, 'b': 'ddas236dasd', 'c': 123}, {'a': 4, 'b': 'ddasd234asdABC', 'c': 900}, {'a': 5, 'b': 'ddasd678hfasd', 'c': 342}, {'a': 6, 'b': 'ddasd234dasdasdABC', 'c': 567}]
现有代码问题
当前代码运行后缺失第1个('a':0)和第6个('a':6)元素,现有代码如下:
updated_list = [] dict_holder = {} for i in range(len(L)): if 'ABC' in L[i]['b'] and not dict_holder: dict_holder.update(L[i]) elif 'ABC' not in L[i]['b'] and dict_holder: dict_holder.update({'b': dict_holder['b'] + ' ' + L[i]['b']}) elif 'ABC' in L[i]['b'] and dict_holder: updated_list.append(dict_holder) dict_holder = {} dict_holder.update(L[i]) print(updated_list)
修正后的代码
updated_list = [] dict_holder = {} for item in L: if 'ABC' in item['b']: if dict_holder: # 先把之前拼接好的存入结果 updated_list.append(dict_holder) dict_holder = {} # 初始化新的目标字典 dict_holder = item.copy() else: if dict_holder: # 拼接到当前活跃的字典 dict_holder['b'] += ' ' + item['b'] else: # 无活跃字典,直接加入结果 updated_list.append(item) # 循环结束后,把最后剩下的活跃字典加入结果 if dict_holder: updated_list.append(dict_holder) print(updated_list)
修正说明
- 新增**不包含
'ABC'且无活跃dict_holder**的处理逻辑:直接将该字典加入结果列表,解决了第1个元素缺失的问题 - 循环结束后新增判断:将最后未存入的
dict_holder(即第6个元素)加入结果,解决了最后一个含'ABC'的元素缺失问题 - 改用直接遍历列表元素的方式,替代按索引遍历,代码更简洁易读
期望输出
[{'a': 0, 'b': 'radndaos43', 'c': 234}, {'a': 1, 'b': 'lABChfgdd65a', 'c': 90011}, {'a': 2, 'b': 'ddasda423sdABC ddas236dasd','c': 324}, {'a': 4, 'b': 'ddasd234asdABC ddasd678hfasd', 'c': 900}, {'a': 6, 'b': 'ddasd234dasdasdABC', 'c': 567}]
内容的提问来源于stack exchange,提问作者Saad Hasan
相关产品推荐
相关产品推荐

