0

次のデータがあるとしましょう

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のより多くのツールを使用して、これを行うためのよりエレガントな方法が存在するようです。

4

1 に答える 1

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}]
于 2013-01-28T22:36:30.210 に答える