字典组合和通过列表条目更新值

时间:2016-02-22 17:13:19

标签: python list dictionary list-comprehension

我有两个列表train_label和train_data我希望遍历每一行i,这是由i for range(train_data.shape [0])完成的,我想更新我的字典中的每个值,以便在第j个密钥将具有列表的相应第i个条目。所以我构造了这个列表理解,但它只将字典的每个值更新为列表中的第一个值,有没有办法使用list-comprehension来做到这一点,这样每个第j个键在每个键中都有第i个值,值对?

assoc_label = {}
 _ = [assoc_label.update({entry : assoc_label.get(entry, train_label[i])}) for entry in range(train_data.shape[0] - 49997) for i in range(train_label.shape[0] - 49997)]

编辑:根据@Scott Hunter建议添加附加内容

所以,train_label会有一些列表说[6.0,4.0,6.0],train_data会有一些像[0.0123123,i,j]这样的浮动数组,但是内容并不重要我只想关联每个位置在numpy数组[0,1,2]中,这是我在dict {0:1:2:}中的键,其中train_label列表中的值为[6.0,4.0,6.0],这导致字典使得我有{0:6.0,1:4.0,2:6.0}否则{entry:train_label [i]}但是dict只会将所有值更新为train_label [i]的第0个值,使得{0:6.0,1: 6.0,2:6.0}。我希望我没有解释这个太复杂,我只想尽可能准确。

2 个答案:

答案 0 :(得分:1)

@ChrisP的答案是使用zip,而不是两个for循环:

 assoc_label = dict(zip(range(train_data.shape[0]), [train_label[i] for i in range(train_data.shape[0])]))
print assoc_label

答案 1 :(得分:0)

那样的东西?我不确定我是否明白这个问题。

import numpy as np

train_label = [6.0,4.0,6.0]
train_data = np.array([0.01,0.04,0.07])
assoc_label = {i : train_label[i] for i in range(len(train_label))}
print(assoc_label)