Python创建数组的元组';来自可变长度数组字典的zip
标题可能过于复杂 我尝试做的是以下几点: 给定一个数组字典Python创建数组的元组';来自可变长度数组字典的zip,python,tuples,Python,Tuples,标题可能过于复杂 我尝试做的是以下几点: 给定一个数组字典 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[
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])
关于如何使用可变长度字典获得上述结果,您有什么想法吗?只需对代码稍作修改即可满足您的需要:
t = sum( zip( *[ h[k] for k in h.keys() ] ), () )
*
用于在python中解压列表
例如:
>>> x = [1, 2, 3]
>>> print(*x)
1 2 3
>>> print(x)
[1, 2, 3]
您可以首先
zip
您的dict的值。zip
接受任意数量的iterables,因此我们将h.values()
解包以提供它们
然后,我们只需要输入压缩后的值
from itertools import chain
h = {'full': [11, 18, 16, 14, 12],
'train': [22, 20, 28, 26, 24],
'test': [38, 36, 34, 32, 30]}
out = tuple(chain.from_iterable(zip(*h.values())))
print(out)
# (11, 22, 38, 18, 20, 36, 16, 28, 34, 14, 26, 32, 12, 24, 30)
您可以从
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)