You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否为字典不同键的数组追加符合匹配条件的subjects行数据?

问题与解决方案

问题描述

我有如下字典:

import numpy as np
groups  = {'group1': np.array([450, 449.]), 'group2': np.array([490, 489.]), 'group3': np.array([568, 567.])}

通过numpy.loadtxt()加载txt文件后得到如下数组:

subjects = np.array([
    [1.0, -1.0],
    [2.0, 1.0],
    [3.0, 2.0],
    ...
    [565.0, 564.0],
    [566.0, 565.0],
    [567.0, 566.0],
    [568.0, 567.0]
])

需求:判断subjects第一列的值是否等于字典中各数组的第二列值,满足条件时将该行数据追加到字典对应键的数组中,期望输出:

groups  = {
    'group1': np.array([[450, 449.], [449, 448]]),
    'group2': np.array([[490, 489.], [489, 488]]),
    'group3': np.array([[568, 567.], [567, 566]])
}

请问是否可以为字典的不同键追加不同的对应值?

解决方案

完全可以实现,利用NumPy的数组拼接功能即可完成,具体步骤如下:

  1. 遍历字典的每个键值对,提取每个组数组的第二列值作为匹配目标;
  2. 在subjects中通过布尔索引筛选出第一列等于匹配目标的行;
  3. 将筛选出的行拼接到对应组的数组中(注意先将原一维数组转为二维,再进行垂直拼接)。

示例代码

import numpy as np

# 初始化字典
groups = {
    'group1': np.array([450, 449.]),
    'group2': np.array([490, 489.]),
    'group3': np.array([568, 567.])
}

# 模拟加载的subjects数组(实际场景用np.loadtxt读取文件)
subjects = np.array([
    [449, 448],
    [489, 488],
    [567, 566],
    [1.0, -1.0],
    [2.0, 1.0]
])

# 遍历字典完成匹配与追加
for group_name, arr in groups.items():
    # 获取当前组的匹配目标(数组第二列值)
    target = arr[1]
    # 筛选符合条件的行
    matched_rows = subjects[subjects[:, 0] == target]
    # 若有匹配行则拼接更新
    if len(matched_rows) > 0:
        groups[group_name] = np.vstack([arr.reshape(1, -1), matched_rows])

# 输出结果
print(groups)

关键说明

  • 原字典中的数组是一维结构,需用reshape(1, -1)转为二维后,才能和匹配到的二维行数组拼接;
  • subjects[:, 0] == target生成的布尔数组可快速定位符合条件的行;
  • 若subjects中有多行匹配同一组的目标,代码会自动将所有匹配行追加进去。

内容的提问来源于stack exchange,提问作者Ludovica

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 11:15:33