Python:将列表字典转换为元组列表

时间:2015-07-28 08:09:27

标签: python list dictionary tuples

我想将列表字典转换为元组列表 这是一个例子:输入数据

d = {
u'x_axis': [1,2,3,7,8,9],
u'y_axis': [5,6,5,6,5,6],
u'z_axis': [1,2,1,2,1,2],
}

我想要的是:

l = [
(1,5,1),
(2,6,2),
(3,5,1),
(7,6,2),
(8,5,1),
(9,6,2),
]

字典中的列表长度相同。

正如您所看到的,x_axis在每个元组等中都是第一个。

有点像旋转-90度

Edit.1
我想在元组中具有相同的元素顺序,因为默认情况下没有定义键的顺序和键的数量。所以我可以将密钥写入一些var,如: keys = d.keys() 如果我做: l =这里我按照键列表的顺序列出元组中的变量

2 个答案:

答案 0 :(得分:4)

使用zip

>>> d = {
...     u'x_axis': [1,2,3,7,8,9],
...     u'y_axis': [5,6,5,6,5,6],
...     u'z_axis': [1,2,1,2,1,2],
... }
>>> list(zip(d['x_axis'], d['y_axis'], d['z_axis']))
[(1, 5, 1), (2, 6, 2), (3, 5, 1), (7, 6, 2), (8, 5, 1), (9, 6, 2)]
Python 2.x中不需要

list(..)。 (在Python 2.x中,zip返回一个列表,在Python 3.x中,zip返回一个迭代器)

<强>更新

使用预定义的键:

>>> keys = 'x_axis', 'y_axis', 'z_axis'  # OR keys = sorted(d)
>>> list(zip(*(d[key] for key in keys)))
[(1, 5, 1), (2, 6, 2), (3, 5, 1), (7, 6, 2), (8, 5, 1), (9, 6, 2)]

注意:keys = d.keys()不起作用,因为Python字典不保证键顺序。

答案 1 :(得分:1)

您可以使用zip功能:

>>> zip(*d.values())
[(5, 1, 1), (6, 2, 2), (5, 3, 1), (6, 7, 2), (5, 8, 1), (6, 9, 2)]

如果您关心订单,则应通过自定义订单将值传递给zip函数。例如:

zip(d['x_axis'], d['y_axis'], d['z_axis'])

如果您想使用collections.OrderedDict并解压缩,请使用values()

>>> from collections import OrderedDict
>>> d=OrderedDict([(u'x_axis', [1, 2, 3, 7, 8, 9]),(u'y_axis', [5, 6, 5, 6, 5, 6]), (u'z_axis', [1, 2, 1, 2, 1, 2])])
>>> 
>>> zip(*d.values())
[(1, 5, 1), (2, 6, 2), (3, 5, 1), (7, 6, 2), (8, 5, 1), (9, 6, 2)]
>>>