我有一个字典d
,其中每个键的所有值都存储在一个数组中
d = {'0': [1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0], '1': [1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0], '2': [1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0], '3': [1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0], '4': [1.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0]}
和字典
d1 = {'0': ('2',), '1': ('1', '3', '4'), '2': ('1', '3', '4'), '3': ('2', '4'), '4': ('2', '3', '5')}
d2 = {'0': ('1', '3', '4'), '1': ('2', '4'), '2': ('2', '3', '5'), '3': ('2', '3', '5'), '4': ('4',)}
我想构建字典data
,该字典包含与字典d
中相同的键和值,但是存储的值分为许多数组(取决于键),而不是仅一个数组!
因此,将使用d
和data
的长度将字典d1
转换为字典d2
。
如何?对于每个键,值将分为(len(d1[key]) + len(d2[key]))
个数组,其中每个数组将包含(len(d1[key]) * len(d2[key]))
个值。
例如
d['0']= [1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0]
。
从len(d1['0'])=1
和len(d2['0'])=3
开始,则
data['0'] = [[1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0], [1.0, 1.0, 1.0]]
我一直在尝试,但实际上我不知道该怎么做!即如何将第一个(len(d1[key]) * len(d2[key]))
值存储在数组中,然后将其移动到下一个(len(d1[key]) * len(d2[key]))
值并将其存储在数组中,一旦我有了(len(d1[key]) + len(d2[key]))
数组以值!
这是我做的,但是没有给我想要的字典!
data = defaultdict(list)
first_data = [] #array contains len(d1[key])*len(d2[key]) values
second_data = [] #array contains len(d1[key])+len(d2[key]) arrays
for key in constraints:
for values in range( (len(d1[key])*len(d2[key])) * (len(d1[key])+len(d2[key])) ):
for values in range(len(d1[key])*len(d2[key])):
first_data.append(values)
values += values
second_data.append(first_data)
data[key] = second_data
答案 0 :(得分:2)
Sentry
或者没有预先计算的moment
。
lens = {k: len(d1[k])*len(d2[k]) for k in d1}
data = {k: [a[i:i+lens[k]] for i in range(0, len(a), lens[k])]
for k, a in d.items()}