Python中两个键名相似的字典如何追加numpy数组类型的值
问题分析与实现方案
原代码错误原因
- 直接遍历
Dic1获取键值对的写法错误:Python字典默认遍历返回键,需要调用.items()方法才能同时获取键和值 - 用
Dic1的键作为列表d2v的索引非法:列表仅支持整数下标索引,无法匹配字典的键类型 - Numpy数组没有原生
append方法:普通列表的append方法不适用于numpy数组,需要使用numpy官方的拼接函数 - 未对齐两个字典的对应关系:两个字典键名不一致,无法通过键名匹配,需要按字典存储的顺序对齐取值(Python 3.7+ 字典默认保留插入顺序,符合对应位置匹配的需求)
可行实现思路
默认两个字典的键按插入顺序一一对应,根据你要保留的键的来源,有两种常用实现:
方案1:保留Dic1的键,将Dic2的对应值拼接到Dic1的值上
拼接轴可按需选择:原数组为200*100尺寸,axis=0代表纵向拼接(行数变为400,列数不变),axis=1代表横向拼接(列数变为200,行数不变)
import numpy as np # 按顺序获取Dic2的所有值,和Dic1的键顺序一一对应 d2_values = list(Dic2.values()) # 遍历Dic1的键值对,按索引匹配Dic2的对应值拼接 for idx, (k, arr1) in enumerate(Dic1.items()): arr2 = d2_values[idx] Dic1[k] = np.concatenate([arr1, arr2], axis=0) # 最终Dic1就是合并后的字典
方案2:保留Dic2的键,将Dic1的对应值拼接到Dic2的值上
import numpy as np d1_values = list(Dic1.values()) for idx, (k, arr2) in enumerate(Dic2.items()): arr1 = d1_values[idx] Dic2[k] = np.concatenate([arr2, arr1], axis=0) # 最终Dic2就是合并后的字典
如果你使用的Python版本低于3.7,字典不保留插入顺序,需要提前确认两个字典的键的对应排序规则,先对两个字典的键按统一规则排序后再取值拼接,避免对应错位。
如果你需要的是把两个数组存为列表而不是拼接成单个数组,可以把np.concatenate对应的行改成Dic1[k] = [arr1, arr2]即可。
内容的提问来源于stack exchange,提问作者Karthik N
相关产品推荐
相关产品推荐

