首页 > 解决方案 > Python 从数组的可变长度字典创建数组的 zip 元组

问题描述

标题可能过于复杂。

我正在尝试做的是以下内容:

给定一个数组字典

h = {'full':[10, 8, 6, 4, 2],'train':[12, 10, 8, 6, 4],'test':[8,6,4,2, 0]}

我想获取数组的所有元素的元组,其中第一个元素取自第一个数组的第一个元素,第二个取自第二个数组的第一个元素,第三个取自第三个的第一个元素数组,第四个是第一个数组的第二个元素,依此类推,直到用尽。

如果我知道数组的数量总是 3,我可以这样做:

sets = list(h.keys())
t = sum( zip( h[sets[0], h[sets[1]], h[sets[2]] ), () )

这产生(10, 12, 8, 8, 10, 6, 6, 8, 4, 4, 6, 2, 2, 4, 0).

不知道我尝试过的字典中有多少键:

t = sum( zip( [ h[k] for k in h.keys() ] ), () )

但这会产生:
([10, 8, 6, 4, 2], [12, 10, 8, 6, 4], [8, 6, 4, 2, 0])

关于如何使用可变长度字典获得上述结果的任何想法?

标签: pythontuples

解决方案


您可以将未包装的带拉链的三胞胎从以下位置展平zip(*h.values())

>>> h = {'full':[10, 8, 6, 4, 2],'train':[12, 10, 8, 6, 4],'test':[8,6,4,2, 0]}
>>> tuple(zip(*h.values()))
((10, 12, 8), (8, 10, 6), (6, 8, 4), (4, 6, 2), (2, 4, 0))
>>> tuple(x for y in zip(*h.values()) for x in y)
(10, 12, 8, 8, 10, 6, 6, 8, 4, 4, 6, 2, 2, 4, 0)

推荐阅读