假设我们有以下数据
all_values = (('a', 0, 0.1), ('b', 1, 0.5), ('c', 2, 1.0))
我们希望从中生成如下词典列表:
[{'location': 0, 'name': 'a', 'value': 0.1},
{'location': 1, 'name': 'b', 'value': 0.5},
{'location': 2, 'name': 'c', 'value': 1.0}]
在Python中执行此操作的最佳方法是什么?
我能够提出的最佳解决方案是
>>> import itertools
>>> zipped = zip(itertools.repeat(('name', 'location', 'value')), all_values)
>>> zipped
[(('name', 'location', 'value'), ('a', 0, 0.1)),
(('name', 'location', 'value'), ('b', 1, 0.5)),
(('name', 'location', 'value'), ('c', 2, 1.0))]
>>> dicts = [dict(zip(*e)) for e in zipped]
>>> dicts
[{'location': 0, 'name': 'a', 'value': 0.1},
{'location': 1, 'name': 'b', 'value': 0.5},
{'location': 2, 'name': 'c', 'value': 1.0}]
这似乎是一种更优雅的方式,可能使用itertools中的更多工具。
答案 0 :(得分:7)
怎么样:
In [8]: [{'location':l, 'name':n, 'value':v} for (n, l, v) in all_values]
Out[8]:
[{'location': 0, 'name': 'a', 'value': 0.1},
{'location': 1, 'name': 'b', 'value': 0.5},
{'location': 2, 'name': 'c', 'value': 1.0}]
或者,如果您更喜欢更通用的解决方案:
In [12]: keys = ('name', 'location', 'value')
In [13]: [dict(zip(keys, values)) for values in all_values]
Out[13]:
[{'location': 0, 'name': 'a', 'value': 0.1},
{'location': 1, 'name': 'b', 'value': 0.5},
{'location': 2, 'name': 'c', 'value': 1.0}]