【问题标题】:Python: convert Dictionary of lists to list of tuplesPython:将列表字典转换为元组列表
【发布时间】:2015-07-28 08:09:27
【问题描述】:

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

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度

编辑.1
我希望元组中元素的顺序与键的顺序相同,并且默认情况下未定义键的数量。所以我可以写一些 var 的键,比如: 键 = d.keys() 如果我做: l = 这是我想要的元组中的变量,按键列表的顺序

【问题讨论】:

  • 这有点“为我做作业”。您应该让我们知道您的尝试。
  • 我对这个问题投了反对票,因为这似乎是一个家庭作业问题,您没有提供任何有关您自己尝试解决的信息。 Stack Overflow 不是让你完成作业的地方。可以通过添加有关您尝试过的内容的信息来改进该问题。如果您在发布之前没有尝试任何事情;下次再做!

标签: python list dictionary tuples


【解决方案1】:

使用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)]

list(..) 在 Python 2.x 中不需要。 (在 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 字典不保证键顺序。

【讨论】:

    【解决方案2】:

    你可以使用zip函数:

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

    如果您关心顺序,您应该通过自定义顺序将值传递给zip function.for 例如:

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

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

    >>> 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)]
    >>> 
    

    【讨论】:

    • 这不会保留x,y,z 的顺序,这可能很重要,即使操作没有明确说明。
    • 如果我不知道轴名称和编号怎么办。我可以通过 d.key() 记住数组中的轴名称,并通过迭代 d 来创建像你一样的数组,但是如何更优雅地做到这一点
    • @MichałPiotrStankiewicz 如果您不知道键名,最好的方法是使用订单字典而不是简单的字典来存储您的项目!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-06
    • 2021-11-10
    • 2010-09-20
    • 2017-06-07
    相关资源
    最近更新 更多