如何将Python字典(dict)的值批量替换为对应数组(array)元素?
如何将字典中的值替换为数组中对应元素?
看起来你需要把字典里的每个值(那些二维numpy数组)替换成另一个大数组里对应位置的元素,而且两者的元素数量刚好匹配(都是16个)。这里给你两种简单的实现方式,基于Python和numpy:
前提说明
首先要确认:你的Python版本是3.7及以上(因为3.7+的字典是插入有序的),这样原字典的键顺序和目标数组的元素顺序是一一对应的,和你给出的示例完全匹配。如果是更早的Python版本,你需要提前把字典的键按顺序存到一个列表里,确保和目标数组的索引对应。
代码实现
首先先定义好你的原字典和目标数组(这里用numpy):
import numpy as np # 原字典 original_dict = { '10.0.1.1': np.array([0.44739793, 0.45896071]), '10.0.1.11': np.array([0.0651452 , 0.79400788]), '10.0.1.17': np.array([-0.30955505, -0.68114728]), '10.0.1.18': np.array([-0.86424049, 0.36407693]), '10.0.1.2': np.array([ 0.53028569, -0.34903309]), '10.0.1.22': np.array([ 0.82654681, -0.12412811]), '10.0.1.23': np.array([-0.34425123, 0.1718602 ]), '10.0.1.25': np.array([-0.96558349, -0.56542351]), '10.0.1.26': np.array([-0.65562853, 0.03249861]), '10.0.1.5': np.array([ 0.29772161, -0.32568994]), '10.0.1.6': np.array([-0.09182783, 0.60688289]), '10.0.1.9': np.array([ 1. , -0.25280971]), '10.0.11.100': np.array([0.25305214, 0.15893858]), '10.0.12.100': np.array([0.73537509, 0.38210647]), '10.0.13.100': np.array([-0.79243841, -0.32855154]), '10.0.14.100': np.array([-0.13199944, -0.34254908]) } # 目标数组 target_array = np.array([ [-0. , 0. , 0. , -0.92999877, 2. ], [ 0.72697727, -1.00416248, -0.06716753, -0.16522289, -0. ], [ 0.14544414, -0.04370471, 0.74557808, 0.70755899, -0. ], [ 0.14544414, -0.04370471, 0.74557808, 0.70755899, -0. ], [-0.14544414, 0.04370471, -0.74557808, 0.70755899, -0. ], [-0.14544414, 0.04370471, -0.74557808, 0.70755899, 0. ], [-0. , -0. , 0. , -0.4311162 , -0. ], [ 0.14544414, -0.04370471, 0.74557808, 0.70755899, 0. ], [ 0. , -0. , 0. , -0.4311162 , -0. ], [-0.14544414, 0.04370471, -0.74557808, 0.70755899, -0. ], [-0. , 0. , 0. , -0.92999877, -2. ], [ 1.18660948, 0.99293878, -0.57256311, -0.16522289, -0. ], [-0. , -0. , 0. , -0.4311162 , -0. ], [-1.18660948, -0.99293878, 0.57256311, -0.16522289, -0. ], [-0.72697727, 1.00416248, 0.06716753, -0.16522289, -0. ], [-0. , 0. , -0. , -0.4311162 , 0. ] ])
方法1:用字典推导式(简洁高效)
一行代码就能生成你要的新字典:
new_dict = {key: target_array[idx] for idx, key in enumerate(original_dict.keys())}
方法2:循环遍历替换(直观,适合加额外逻辑)
如果你需要在替换过程中做一些额外处理(比如检查元素格式),可以用循环的方式:
# 先复制原字典,避免修改原始数据 new_dict = original_dict.copy() for idx, key in enumerate(new_dict.keys()): # 这里可以加额外的判断或处理逻辑 new_dict[key] = target_array[idx]
验证结果
你可以打印new_dict['10.0.1.1']来验证,会输出:
array([-0. , 0. , 0. , -0.92999877, 2. ])
完全符合你期望的结果。
注意事项
如果你的Python版本低于3.7,字典是无序的,这时候需要手动定义键的顺序列表,比如:
keys_order = [ '10.0.1.1', '10.0.1.11', '10.0.1.17', '10.0.1.18', '10.0.1.2', '10.0.1.22', '10.0.1.23', '10.0.1.25', '10.0.1.26', '10.0.1.5', '10.0.1.6', '10.0.1.9', '10.0.11.100', '10.0.12.100', '10.0.13.100', '10.0.14.100' ]
然后遍历这个列表来替换:
new_dict = {key: target_array[idx] for idx, key in enumerate(keys_order)}
内容的提问来源于stack exchange,提问作者Luca Lazzati
相关产品推荐
相关产品推荐

