在Python中将数组元素匹配到字典键

0 投票
1 回答
812 浏览
提问于 2025-04-16 22:27

我正在尝试将数组中的元素与字典的键进行匹配。更具体来说,我有一个字典,它的键用来表示一种疾病状态(由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

为了更清楚,我想根据每个模拟对象的疾病状态和年龄,把字典中的项目填入'sims'的最后一列。

1 个回答

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.]])

撰写回答