Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用一些过滤器将可变长度列表转换为dict_Python - Fatal编程技术网

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版本怎么样?