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
相关产品推荐
相关产品推荐

