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

Python实现重复列表转子列表的方法求助

问题描述

我有多个如下格式的列表:

a = [['server_1', 'abc'], ['server_2', 'abc'], ['server_1', 'def']]
b = [['server_3', 'abc'], ['server_3', 'def'], ['server_4', 'abc']]
c = [['server_5', 'abc'], ['server_6', 'abc'], ['server_5', 'def']]

需要将这些数据转换为如下形式,把同一服务器对应的所有附属数据合并到同一个子列表中:

OUTPUT:
a = [['server_1', 'abc', 'def'], ['server_2', 'abc']]
b = [['server_3', 'abc', 'def'], ['server_4', 'abc']]
c = [['server_5', 'abc', 'def'], ['server_6', 'abc']]

我尝试过用多层循环和条件语句对比前后元素,但没成功,尝试的代码如下:

for part in repeating_list:      
    if part not in repeating_list:        
        new_list.append([part])      
    else:        
        pass (this should return it to sublist)
return new_list
解决方案

可以用字典实现这个需求,利用字典键的唯一性分组服务器,再将字典转换为目标格式的列表。具体代码如下:

def merge_server_data(data):
    server_dict = {}
    for server, item in data:
        if server not in server_dict:
            server_dict[server] = [server]
        server_dict[server].append(item)
    return list(server_dict.values())

# 测试示例
a = [['server_1', 'abc'], ['server_2', 'abc'], ['server_1', 'def']]
b = [['server_3', 'abc'], ['server_3', 'def'], ['server_4', 'abc']]
c = [['server_5', 'abc'], ['server_6', 'abc'], ['server_5', 'def']]

print("a =", merge_server_data(a))
print("b =", merge_server_data(b))
print("c =", merge_server_data(c))

运行后输出结果:

a = [['server_1', 'abc', 'def'], ['server_2', 'abc']]
b = [['server_3', 'abc', 'def'], ['server_4', 'abc']]
c = [['server_5', 'abc', 'def'], ['server_6', 'abc']]

代码说明

  • 遍历输入的每个子列表,提取服务器名和附属数据
  • 用字典存储每个服务器对应的列表:若服务器不在字典中,创建以服务器名为首元素的新列表;若已存在,将附属数据追加到对应列表
  • 最后将字典的值转为列表,得到合并后的结果

这种方法比多层循环对比效率更高,处理大量数据时优势更显著。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 18:40:55