我想转换以下python输入:
[{'paramA': ['valA1','valA2','valA3','valA4']},
{'paramB': ['valB1','valB2','valB3','valB4']},
{'paramC': ['valC1','valC2','valC3','valC4']},
# ...........................................,
{'paramN': ['valN1', 'valN2','valN3','valN4']}]
到以下输出:
[{'paramA': 'valA1','paramB': 'valB1', 'paramC': 'valC1', ...,'paramN':'valN1' }
{'paramA': 'valA2','paramB': 'valB2', 'paramC': 'valC2', ...,'paramN':'valN2' }
{'paramA': 'valA3','paramB': 'valB3', 'paramC': 'valC3', ...,'paramN':'valN3' }
{'paramA': 'valA4','paramB': 'valB4', 'paramC': 'valC4', ...,'paramN':'valN4' } ]
我能想到的唯一功能是:
def transformParams( inputParams ):
res = []
for i in inputParams:
for k,v in i.items():
for ind, inv in enumerate(v):
if len(res) <= ind:
res.append({})
res[ind][k] = inv
return res
我是Python新手,我认为这可以用一种更简单的Pythonic方式来完成,即使用列表理解。有人能给我一个更好的答案吗?你知道吗
这就是我想到的。不是很漂亮,但是完成了任务。此外,这要求值的长度始终相同,并且字典的第一个键和值是所需的param和val
编辑:忽略此答案。Martijn Pieters answer更漂亮,更可读!你知道吗
首先将输入列表中的所有内容连接到one字典中;这样您就可以使用
zip()
将所有值转换为行,并将其与键重新组合:^{} function 将输入列表中的元素配对在一起,生成一个元组,其中包含所有第一个元素,然后是所有第二个元素,依此类推。
zip(*list_of_lists)
调用中的*
将包含的所有序列(这里是来自组合字典值的所有列表)作为单独的参数,然后zip()
继续配对。本质上,这会将行转换为列序列。你知道吗然后将这些列序列与键重新组合(再次使用
zip()
进行配对)以形成输出字典。你知道吗演示:
相关问题 更多 >
编程相关推荐