You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按元组相同元素将元组列表拆分为多个子列表?

解决方案:用字典动态分组适配未知颜色场景

这问题我太熟悉了!刚好可以用Python的字典(或者更便捷的collections.defaultdict)来解决,完美应对你这种不知道提前颜色数量和具体值的情况,而且后续操作子列表也超级灵活。

核心思路

用字典的键存储颜色(元组的第二个元素),值存储对应颜色的子列表。遍历原列表时动态创建颜色对应的键和列表,完全不需要预先定义变量。

基础实现代码

lst = [('hello', 'Blue'), ('hi', 'Red'), ('hey', 'Blue'), ('yo', 'Green')]

# 初始化一个空字典,用来存颜色和对应的子列表
color_groups = {}

# 遍历原列表,逐个分组
for text, color in lst:
    # 如果当前颜色还没在字典里,先创建一个空列表
    if color not in color_groups:
        color_groups[color] = []
    # 把当前二元组加到对应颜色的列表里
    color_groups[color].append((text, color))

# 后续操作示例:
# 1. 获取某个颜色对应的子列表
red_list = color_groups['Red']
print(red_list)  # 输出: [('hi', 'Red')]

# 2. 获取所有子列表的集合(转成列表格式)
all_sub_lists = list(color_groups.values())
print(all_sub_lists)
# 输出: [[('hello', 'Blue'), ('hey', 'Blue')], [('hi', 'Red')], [('yo', 'Green')]]

简化版:用collections.defaultdict省掉判断步骤

如果你不想每次都写if color not in color_groups的判断,可以用Python标准库的defaultdict,它会自动为不存在的键创建默认值(这里我们指定默认值为列表):

from collections import defaultdict

lst = [('hello', 'Blue'), ('hi', 'Red'), ('hey', 'Blue'), ('yo', 'Green')]

# 初始化一个默认值为列表的字典
color_groups = defaultdict(list)

# 直接遍历追加,不用判断键是否存在
for item in lst:
    color_groups[item[1]].append(item)

# 后续操作和上面完全一致
blue_list = color_groups['Blue']
all_sub_lists = list(color_groups.values())

为什么这个方案可行?

  • 字典的键是动态生成的:不管用户输入多少种颜色,都会自动创建对应的键,完全不需要提前知晓颜色信息。
  • 子列表可直接操作:不管是按颜色单独获取子列表做修改,还是遍历所有子列表批量处理,都能直接通过字典的键或values()方法实现。

内容的提问来源于stack exchange,提问作者TGamer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 16:17:57