【问题标题】:Matching array elements to dictionary keys in Python在 Python 中将数组元素与字典键匹配
【发布时间】:2011-07-28 16:43:40
【问题描述】:

我正在尝试将数组中的元素与字典键匹配。更具体地说,我有一个字典,其键标识疾病状态(一组 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”的最后一列。

【问题讨论】:

  • 抱歉我的无知...你用的是什么版本的Python,什么是np?
  • @jc:这些都是好问题。对于后者:npnumpy 的常用缩写;例如import numpy as np

标签: python arrays dictionary


【解决方案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.]])

【讨论】:

    猜你喜欢
    • 2011-07-09
    • 2013-09-24
    • 2019-02-24
    • 2018-04-29
    • 2019-05-08
    • 2015-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多