这是一个功能齐全的解决方案,可以应用于任意尺寸。
d = { "I0": [0,1,5,2], "I1": [1,3,5,2], "I2": [5,9,10,1]}
map(dict, zip(*map(lambda (k, v): map(lambda vv: (k, vv), v), d.iteritems())))
详细说明:(我正在使用ipython
和下划线_
表示之前的输出)
In [1]: d = {'I0': [0, 1, 5, 2], 'I1': [1, 3, 5, 2], 'I2': [5, 9, 10, 1]}
In [2]: map(lambda (k, v): map(lambda vv: (k, vv), v), _.iteritems())
Out[2]:
[[('I1', 1), ('I1', 3), ('I1', 5), ('I1', 2)],
[('I0', 0), ('I0', 1), ('I0', 5), ('I0', 2)],
[('I2', 5), ('I2', 9), ('I2', 10), ('I2', 1)]]
In [3]: zip(*_)
Out[3]:
[(('I1', 1), ('I0', 0), ('I2', 5)),
(('I1', 3), ('I0', 1), ('I2', 9)),
(('I1', 5), ('I0', 5), ('I2', 10)),
(('I1', 2), ('I0', 2), ('I2', 1))]
In [4]: map(dict, _)
Out[4]:
[{'I0': 0, 'I1': 1, 'I2': 5},
{'I0': 1, 'I1': 3, 'I2': 9},
{'I0': 5, 'I1': 5, 'I2': 10},
{'I0': 2, 'I1': 2, 'I2': 1}]