将数组元素与Python中的字典键匹配

时间:2011-07-28 16:43:40

标签: python arrays dictionary

我正在尝试将数组中的元素与字典键进行匹配。更具体地说,我有一个词典,其键识别疾病状态(一组0和1)和年龄(0-100)(即,((0,1,1,0),35)是一个关键)。我想循环遍历这些键并获取相应的值以将它们放在数组中的特定位置。我所拥有的数组的结构使得前四列代表疾病状态(0,1,1,0),第五列代表年龄。鉴于相应的疾病状态和年龄,我希望在第六列中填写字典中的信息。以下是结构示例:

# Inputs
dis_state_list = [(0,0,0,1), (0,1,0,1), (0,1, 0,1), (0,0,0,0)]
ages = np.array([5, 10, 15, 20])
sims = np.zeros([5, 6])
# Make dictionary
dis_age_dict = {}
for a in ages:
    for d in dis_state_list:
        dis_age_dict[tuple(d), a] = np.random.normal(loc = 0, scale = .1, size = 1) 

# Input sample values
sims[:, 4] = np.array([5, 10, 15, 15, 20])
sims [1,3] = 1
sims [2,1] = 1

为了澄清,我想根据每个sim的疾病状态和年龄,在字典中填写'sims'的最后一栏。

1 个答案:

答案 0 :(得分:1)

使用

>>> sims
array([[  0.,   0.,   0.,   1.,   5.,   0.],
       [  0.,   1.,   0.,   1.,  10.,   0.],
       [  0.,   1.,   0.,   1.,  15.,   0.],
       [  0.,   0.,   0.,   0.,  20.,   0.]])

>>> d
{ ((0, 0, 0, 1), 5):  -1,
  ((0, 0, 0, 0), 20): -4,
  ((0, 1, 0, 1), 15): -3,
  ((0, 1, 0, 1), 10): -2 }

(不是实际的显示格式,只是这样放置以便于查看)

执行以下操作

for row in sims:
    key = (tuple(row[:4]), row[4])

    row[5] = d[key]

然后你得到了

>>> sims
array([[  0.,   0.,   0.,   1.,   5.,  -1.],
       [  0.,   1.,   0.,   1.,  10.,  -2.],
       [  0.,   1.,   0.,   1.,  15.,  -3.],
       [  0.,   0.,   0.,   0.,  20.,  -4.]])