Python练习:对元组列表按首值分组提取有序字母列表
Python元组列表分组实现方案
实现思路:
- 使用
collections.defaultdict存储分组结果,天然支持同key追加元素,能保留字母的原始出现顺序 - 遍历原始元组列表完成分组
- 对分组结果按数字值升序排序,同时将数字转为字符串格式,生成最终要求的元组列表
完整实现代码
from collections import defaultdict # 原始输入数据 raw_data = [(1, 'E'), (2, 'A'), (5, 'B'), (3, 'A'), (6, 'C'), (7, 'A'), (9, 'A'), (1, 'B'), (2, 'E'), (3, 'B'), (7, 'C'), (5, 'C'), (3, 'D'), (8, 'E'), (9, 'B'), (8, 'D'), (3, 'E'), (5, 'D'), (8, 'E'), (9, 'E'), (7, 'E'), (3, 'E'), (5, 'D'), (9, 'A'), (4, 'E'), (6, 'E'), (8, 'A'), (5, 'E'), (6, 'A'), (0, 'C'), (9, 'A'), (3, 'D'), (5, 'E'), (4, 'B'), (6, 'B'), (7, 'D'), (8, 'B'), (9, 'C'), (1, 'E'), (5, 'E')] # 分组处理 group_dict = defaultdict(list) for num, char in raw_data: group_dict[num].append(char) # 排序并转换为要求的格式 result = [(str(num), char_list) for num, char_list in sorted(group_dict.items())] # 打印验证结果 for item in result: print(item)
如果你不想额外导入模块,也可以用普通字典实现分组逻辑,效果完全一致:
group_dict = {} for num, char in raw_data: if num not in group_dict: group_dict[num] = [] group_dict[num].append(char)
运行输出
运行后得到的结果和预期完全匹配:
('0', ['C']) ('1', ['E', 'B', 'E']) ('2', ['A', 'E']) ('3', ['A', 'B', 'D', 'E', 'E', 'D']) ('4', ['E', 'B']) ('5', ['B', 'C', 'D', 'D', 'E', 'E', 'E']) ('6', ['C', 'E', 'A', 'B']) ('7', ['A', 'C', 'E', 'D']) ('8', ['E', 'D', 'E', 'A', 'B']) ('9', ['A', 'B', 'E', 'A', 'A', 'C'])
内容的提问来源于stack exchange,提问作者Luis Alejandro Vargas Ramos
相关产品推荐
相关产品推荐

