python - 在列表中查找数字并将python中数字之间的所有项目连接起来
问题描述
我有一个看起来像这样的列表:
list1 = ['390140', 'string3', 'string2', '631019', 'string1', '', '6059152', 'string4', 'string5', '', '6951201', 'string6']
我必须将此列表转换为字典列表,如下所示:
list2 = [{'code':'390140','description': 'string3 string2'}, {'code':'631019','description':'string1 '},{'code':'6051952','description': 'string4 string5', ...]
而每个数字是 acode
并且以下字符串是description
. 我尝试了数字的索引,然后将主列表分成子列表,如下面的方法所示。这种方法行不通。
#x = [item for item in list1 if item.isdigit()]
idx = [idx for idx, item in enumerate(list1) if item.isdigit()]
for i in idx:
list2.append({'code': list1[i], 'description': ' '.join(list1[idx[i]:idx[i+1]])})
list2
是我希望获得的输出。
解决方案
很快具有itertools.groupby
功能:
from itertools import groupby
list1 = ['390140', 'string3', 'string2', '631019', 'string1', '', '6059152', 'string4', 'string5', '', '6951201', 'string6']
groups = groupby(list1, key=str.isdigit)
codes = [{'code': next(g), 'description': ' '.join(next(groups)[1])} for _, g in groups]
print(codes)
输出:
[{'code': '390140', 'description': 'string3 string2'},
{'code': '631019', 'description': 'string1 '},
{'code': '6059152', 'description': 'string4 string5 '},
{'code': '6951201', 'description': 'string6'}]
推荐阅读
- c# - 无法让 Alertify 消息框出现在 asp.net 中
- asp.net-mvc - 2 用于加载目的的模态显示排序
- javascript - Firebase Cloud 功能:警告
- react-native - 创建动态 TabNavigation
- jenkins - Jenkins Scripted Pipeline - 执行每个阶段后调用 REST API
- c++ - 关于迭代次数的任务
- azure - 如何在 Microsoft azure 中上传结构化表格数据并在其上构建 QnA 机器人
- javascript - 如何从网站中的同一个按钮从 google 和 facebook 注销?
- reactjs - TypeError:this.state.monsters.map 不是函数
- powershell - 在 Windows 10 的开始菜单选项中禁用“更改帐户设置”