Python中基于索引关联的双列表元素按对应字符串合并方案
解决Python中字符串关联数值的合并与排序问题
核心思路
利用字典的键值对特性,将字符串作为键,对应的数值累加(或收集)作为值,完成不同列表中同一字符串的数值合并,最后按需求排序并拆分出结果列表。
代码实现
1. 初始化数据
A = [3, 4, 2] B = [2, 7, 6] Ai = ["Joe", "John", "Jim"] Bi = ["John", "Jim", "Joe"]
2. 合并同一字符串的数值(以求和为例)
# 初始化字典存储字符串与合并数值的映射 value_map = {} # 处理A与Ai的对应关系 for num, name in zip(A, Ai): value_map[name] = value_map.get(name, 0) + num # 处理B与Bi的对应关系 for num, name in zip(B, Bi): value_map[name] = value_map.get(name, 0) + num
这里用dict.get()方法简化了判断键是否存在的逻辑,若键不存在则默认返回0,直接累加数值。
3. 排序并拆分结果
# 按合并数值升序排序,数值相同时按字符串升序排序(可选) sorted_items = sorted(value_map.items(), key=lambda x: (x[1], x[0])) # 拆分得到排序后的数值列表和对应字符串列表 sorted_values = [item[1] for item in sorted_items] sorted_names = [item[0] for item in sorted_items]
4. 输出结果
print("排序后的合并数值列表:", sorted_values) print("对应字符串列表:", sorted_names)
运行结果:
排序后的合并数值列表: [6, 9, 9] 对应字符串列表: ['John', 'Joe', 'Jim']
扩展:收集所有关联数值而非求和
如果需要保留每个字符串对应的所有关联数值(而非求和),只需将字典的值改为列表:
value_map = {} for num, name in zip(A, Ai): value_map.setdefault(name, []).append(num) for num, name in zip(B, Bi): value_map.setdefault(name, []).append(num) # 按数值列表的总和排序 sorted_items = sorted(value_map.items(), key=lambda x: sum(x[1])) sorted_value_lists = [item[1] for item in sorted_items] sorted_names = [item[0] for item in sorted_items]
运行后sorted_value_lists为[[4, 2], [3, 6], [2, 7]],对应字符串列表为['John', 'Joe', 'Jim']。
内容的提问来源于stack exchange,提问作者organicman276
相关产品推荐
相关产品推荐

