繁体   English   中英

基于值维的具有列表迭代的字典理解

[英]dictionary comprehension with list iteration based on value dimensions

特定

import numpy as np

t={'a':np.random.randint(0,9,[2,3]),'b':np.random.randint(0,9,[2,4])}
l=np.hstack([t.get(k) for k in t.keys()])
l=np.vstack((l, np.random.randint(0,9,[1,7])))

有没有一种方法可以将上面的列表l映射到字典,以使键映射到字典t的键,而值映射到在列上对齐的修改后的列表l ,与t相同?

以下for loop有效:

t2={}
s=0
e=0
for k in t.keys():
    e=s+t.get(k).shape[1]
    t2[k]=l[:,s:e]
    s=e

但是我想知道是否有一个等效于上述for循环的线性班轮字典理解?

您的代码取决于键的顺序。 尝试用for k in ('b', 'a') for k in t.keys()替换for k in t.keys()for k in ('b', 'a') ,您将不会获得预期的结果。 即使自python 3.7起就保证了元素的顺序(请参见注释),也可能依赖它不是一个好主意。

您可以使用元组:

import numpy as np

a = np.random.randint(0,9,[2,3])
b = np.random.randint(0,9,[2,4])

t = [('a', a), ('b', b)]
l = np.hstack([v for _, v in t])

c = np.random.randint(0,9,[1,7])
l = np.vstack((l, c))

要以dict理解方式转换代码,可以计算列索引:

import itertools
indices = list(itertools.accumulate((v.shape[1] for _, v in t)))
# [3, 7]

然后产生数组:

t2 = {k: l[:,s:s+v.shape[1]] for (k, v), s in zip(t, [0]+indices)}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM