如何合并元组列表中重复键?将对应值转为列表形式
解决方法
这里有几种实用的Python实现方式,按需选择即可:
方法一:普通字典手动处理
适合基础场景,无需额外导入模块:
original_list = [('1', 'a'), ('2', 'b'), ('3', 'c'), ('3', 'd'), ('4', 'e'), ('4', 'f'), ('5', 'g')] result_dict = {} for num, char in original_list: if num not in result_dict: result_dict[num] = [] result_dict[num].append(char) # 转换为目标格式的列表 result_list = list(result_dict.items()) print(result_list) # 输出: [('1', ['a']), ('2', ['b']), ('3', ['c', 'd']), ('4', ['e', 'f']), ('5', ['g'])]
方法二:使用collections.defaultdict
借助标准库简化代码,不用手动判断键是否存在:
from collections import defaultdict original_list = [('1', 'a'), ('2', 'b'), ('3', 'c'), ('3', 'd'), ('4', 'e'), ('4', 'f'), ('5', 'g')] result_dict = defaultdict(list) for num, char in original_list: result_dict[num].append(char) result_list = list(result_dict.items()) print(result_list)
方法三:使用itertools.groupby
如果原列表中相同数字的元组是连续的(你的例子刚好满足),可以用这个方法:
from itertools import groupby original_list = [('1', 'a'), ('2', 'b'), ('3', 'c'), ('3', 'd'), ('4', 'e'), ('4', 'f'), ('5', 'g')] # 按元组第一个元素分组,提取对应字母组成列表 result_list = [(key, [item[1] for item in group]) for key, group in groupby(original_list, key=lambda x: x[0])] print(result_list)
注意:如果原列表中相同数字的元组不是连续的,使用
groupby前需要先对原列表按第一个元素排序,比如:sorted_list = sorted(original_list, key=lambda x: x[0]),再用groupby处理。
内容的提问来源于stack exchange,提问作者Juuso Uu
相关产品推荐
相关产品推荐

