从仅具有一个数组(每个键)的字典构建具有多个数组(每个键)的字典

时间:2019-05-17 16:37:41

标签: python arrays python-3.x dictionary for-loop

我有一个字典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中相同的键和值,但是存储的值分为许多数组(取决于键),而不是仅一个数组!

因此,将使用ddata的长度将字典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'])=1len(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

1 个答案:

答案 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()}