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

如何在Python中实现嵌套列表按水果元素分组并关联对应编号

解决思路与实现代码

这是个典型的分组映射需求,核心就是把每个水果和它出现过的数字关联起来,再转换成目标格式的列表。我给你两种实现方式,你可以根据情况选择:

方法一:使用collections.defaultdict(更简洁)

这种方式借助Python标准库的工具,能少写很多判断逻辑:

from collections import defaultdict

# 注意原列表里的水果应该是字符串,我这里补上了引号
mylist = [[1, 'apple', 'orange', 'banana'], [2, 'apple'], [3, 'banana', 'grapes']]

# 初始化一个字典,每个键默认对应空列表
fruit_num_map = defaultdict(list)

# 遍历原列表的每个子列表
for sublist in mylist:
    # 取出子列表第一个元素(关联数字)
    related_num = sublist[0]
    # 取出子列表里的所有水果
    fruits = sublist[1:]
    # 把数字添加到每个水果对应的列表中
    for fruit in fruits:
        fruit_num_map[fruit].append(related_num)

# 把字典转换成目标格式的嵌套列表
new_list = [[fruit] + nums for fruit, nums in fruit_num_map.items()]

print(new_list)
# 输出:[['apple', 1, 2], ['orange', 1], ['banana', 1, 3], ['grapes', 3]]

方法二:使用普通字典(无需导入模块)

如果不想用额外的库,用基础字典也能实现,只是多一步键存在性判断:

mylist = [[1, 'apple', 'orange', 'banana'], [2, 'apple'], [3, 'banana', 'grapes']]

fruit_num_map = {}

for sublist in mylist:
    related_num = sublist[0]
    fruits = sublist[1:]
    for fruit in fruits:
        # 如果水果不在字典里,先创建空列表
        if fruit not in fruit_num_map:
            fruit_num_map[fruit] = []
        fruit_num_map[fruit].append(related_num)

new_list = [[fruit] + nums for fruit, nums in fruit_num_map.items()]

print(new_list)
# 输出和上面一致

关键逻辑说明

  1. 字典收集关联关系:用字典的键存储水果名,值存储该水果对应的所有数字,这样能高效完成分组。
  2. 列表推导式转换格式:最后把字典的键值对转换成[水果, 数字1, 数字2...]的子列表,直接拼接列表就能得到目标结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 18:02:44