Python 使用一些过滤器将可变长度列表转换为dict
#我有这两个列表,我想转换这些列表,使其显示以下输出:Python 使用一些过滤器将可变长度列表转换为dict,python,Python,#我有这两个列表,我想转换这些列表,使其显示以下输出: l=['SDL-A-19.0.0-1-WX-ExP.tar','SDL-B-19.0.0-1-WX-ExP.tar','SDL-C-19.0.0-1-WX-ExP.tar','ReadMe'] s=['version','name'] #所需输出: {"version": "19.0.0-1", "name": "A"}, {"version&qu
l=['SDL-A-19.0.0-1-WX-ExP.tar','SDL-B-19.0.0-1-WX-ExP.tar','SDL-C-19.0.0-1-WX-ExP.tar','ReadMe']
s=['version','name']
#所需输出:
{"version": "19.0.0-1", "name": "A"}, {"version": "19.0.0-1", "name": "B"},
{"version": "19.0.0-1", "name": "C"}
请建议一些解决方案您可能需要一个正则表达式来匹配这些文件可以采用的不同名称。根据您提供的示例,您可能可以按照以下方式进行操作:
import re
out = []
for s in l:
try:
pat = r'^[A-Z]{3}-(?P<name>[A-Z])-(?P<version>(?:\d+\.){2}\d+-\d+).*?'
match= re.search(pat, s)
out.append({'version':match.group('version'), 'name':match.group('name')})
except AttributeError:
pass
print(out)
[{'vesion': '19.0.0-1', 'name': 'A'}, {'vesion': '19.0.0-1', 'name': 'B'},
{'vesion': '19.0.0-1', 'name': 'C'}]
重新导入
out=[]
对于l中的s:
尝试:
pat=r'^[A-Z]{3}-(?P[A-Z])-(?P(?:\d+\){2}\d+-\d+。*?)
匹配=重新搜索(pat,s)
out.append({'version':match.group('version'),'name':match.group('name'))
除属性错误外:
通过
打印(输出)
[{'vesion':'19.0.0-1','name':'A'},{'vesion':'19.0.0-1','name':'B'},
{'vesion':'19.0.0-1','name':'C'}]
尽管您可能需要根据实际文件名对其进行一些调整。有关上述情况,请参见正则表达式。您可以尝试以下方法,但这有以下假设。 l的最后一个元素总是“自述”,应该忽略。 版本和名称在l中的位置一致
b=[]
for i in range(len(l)-1):
a ={}
a[s[0]] = l[i][6:14]
a[s[1]] = l[i][4]
b.append(a)
# b is your final list of dictionaries
print(b)
请更新问题以显示您迄今为止尝试/研究的内容。使用
split()
将名称拆分为由-
分隔的组件。然后从这些列表中提取适当的元素并创建字典。根据我的需要更改正则表达式acc。工作得很有魅力。非常感谢:)回答得很好,+1。也许使用命名的捕获组?谢谢@S3DEV的建议,安装在:)19.0.10版本怎么样?