Skip to main content
 首页 » 编程设计

Python:嵌套列表修改

2025年05月04日18dudu

我有一个嵌套的成对数据列表,格式如下:

mylist = [['item1', 'some other stuff', 'value1'],['item1', 'some other stuff', 'value2'],['item2', 'some other stuff', 'value3'],['item2', 'some other stuff', 'value4']] 

我不知道如何执行以下操作,但我需要:

我需要这样对列表进行分组:

[['item1', 'value1', 'value2'], ['item2', 'value3', 'value4']] 

因此对于我的项目列表,如果项目在列表中以不同的值重复多次,则所有值都应与其对应的项目分组。

如有任何帮助,我们将不胜感激。

谢谢

请您参考如下方法:

让我们从使用字典开始,将项目映射到值列表。这将比列表更容易(也更快),因为要确定将新值添加到哪个列表只是 mydict[item] 而不是必须编写某种线性 -搜索功能。

mydict = {} 
for item, otherstuff, value in mylist: 
    mydict.setdefault(item, []).append(value) 

这给你:

{'item1': ['value1', 'value2'], 'item2': ['value3', 'value4']} 

现在我们可以将该字典转换回列表,如果您愿意的话:

groupedlist = [[k] + v for k, v in mydict.items()] 

这给你:

[['item2', 'value3', 'value4'], ['item1', 'value1', 'value2']] 

这里最大的缺点是,一旦将内容放入字典中,就会丢失所有原始顺序。如果您希望 item1 先出现,因为它的第一个条目出现在 item2 的第一个条目之前(或者因为 item2 的最后一个条目出现在后面) item1 可能是?),你已经失去了它。如果它很重要,您可以使用 OrderedDict。

最大的好处是,通常你最终想要的是字典,而不是列表。

较小的好处是,如果您的数据未排序,groupby(…sorted(…)) 需要 O(NlogN) 排序,而此解决方案是 O(N)。通常,这不会有什么不同。如果确实如此,给定 Python 实现和平台的常数因子差异可能无论如何都会超过差异。但如果性能很重要,请测试这两种解决方案并使用更快的解决方案。