Python如何合并两个不同长度数组并将对应元素值相邻放置
数组按对应位置合并的代码修正方案
问题背景
现有两个待合并数组,定义如下:
Arry1 = [{"key" : "A", "values": [[111], [222]]}] Arry2 = [333,444,555]
期望合并后的输出结构为:
output = [{"key" : "A", "values": [[111, 333], [222,444]]}]
原有实现代码运行后出现多余平铺嵌套,不符合预期:
out = [] for t in zip(Arry1[0]["values"],Arry2): for x in t: out.append(x) # 实际输出: [[111], [333], [222], [444]]
错误原因
原有代码存在两个核心问题:
- 没有保留原字典中的
key字段,直接把所有元素平铺追加到空列表,丢失了外层的字典结构 - 对zip返回的位置配对元组做了二次循环拆分,把本该组合在一起的对应元素拆成了独立的列表项
另外zip函数会自动按两个序列中较短的长度做截断,刚好符合需求——Arry2中多余的555会被自动忽略,不需要额外做长度判断。
修正代码
常规循环写法(可读性更高)
# 提取Arry1里的原始字典项 source = Arry1[0] merged_values = [] # 按位置配对两个序列的元素 for sub_arr, num in zip(source["values"], Arry2): # 拼接对应位置的两个值为新子数组 merged_values.append([sub_arr[0], num]) # 组装最终输出结构 output = [{"key": source["key"], "values": merged_values}]
简洁列表推导写法
output = [ { "key": Arry1[0]["key"], "values": [[sub[0], num] for sub, num in zip(Arry1[0]["values"], Arry2)] } ]
以上两段代码运行后都能得到目标结构的输出。
内容的提问来源于stack exchange,提问作者sadiq ali
相关产品推荐
相关产品推荐

