将列表的dict转换为dicts列表的Pythonic方式

mon*_*top -2 python dictionary list

我有以下数据结构:

[('dim1', ['All', 'All', 'All']),
 ('dim2', ['100', '100', '100']),
 ('min', [1500, 1200, 1300]),
 ('max', [2500, 2200, 2000]),
 ('kpi', ['Avg prod', 'Avg prod', 'Sales'])]
Run Code Online (Sandbox Code Playgroud)

我想要以下内容:

[{'dim1': 'All', 'dim2': '100', 'min': 1500, 'max': 2500, 'kpi': 'Avg prod'},
{'dim1': 'All', 'dim2': '100', 'min': 1200, 'max': 2200, 'kpi': 'Avg prod'},
{'dim1': 'All', 'dim2': '100', 'min': 1300, 'max': 2000, 'kpi': 'Avg Sales'}]
Run Code Online (Sandbox Code Playgroud)

我希望能够很好地实现pythonic和尽可能避免嵌套循环.谢谢!

fal*_*tru 5

使用zip列表理解:

>>> lst = [
...     ('dim1', ['All', 'All', 'All']),
...     ('dim2', ['100', '100', '100']),
...     ('min', [1500, 1200, 1300]),
...     ('max', [2500, 2200, 2000]),
...     ('kpi', ['Avg prod', 'Avg prod', 'Sales'])
... ]
>>>
>>> keys, values = zip(*lst)
>>> [dict(zip(keys, vs)) for vs in zip(*values)]
[{'dim1': 'All', 'max': 2500, 'dim2': '100', 'kpi': 'Avg prod', 'min': 1500},
 {'dim1': 'All', 'max': 2200, 'dim2': '100', 'kpi': 'Avg prod', 'min': 1200},
 {'dim1': 'All', 'max': 2000, 'dim2': '100', 'kpi': 'Sales', 'min': 1300}]
Run Code Online (Sandbox Code Playgroud)