簡體   English   中英

Python:將列表字典轉換為元組列表

[英]Python: convert Dictionary of lists to list of 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 =這里我想要的是元組中的vars,按keys-list的順序

使用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返回一個迭代器)

UPDATE

使用預定義的鍵:

>>> 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字典不能保證鍵順序。

您可以使用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'])

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM