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