【问题标题】:Build a dictionary with multiple arrays(for each key) from a dictionary with only one array(for each key)从只有一个数组(每个键)的字典构建一个包含多个数组(每个键)的字典
【发布时间】:2019-10-05 00:30:12
【问题描述】:

我有字典 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 将使用 d1d2 的长度转换为字典 data

如何?对于每个键,值将被划分为(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

【问题讨论】:

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


    【解决方案1】:
    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()}
    

    或者没有预先计算的lens

    data = {k: [a[i:i+n] for i in range(0, len(a), n)] 
            for k, a in d.items() for n in [len(d1[k])*len(d2[k])]}
    

    【讨论】:

      猜你喜欢
      • 2019-01-18
      • 2016-11-05
      • 2021-02-08
      • 1970-01-01
      • 2011-02-10
      • 1970-01-01
      • 2018-03-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多