PYTHON:将嵌套列表中相同值的子列表创建到一个列表中

时间:2015-03-14 18:26:02

标签: python list sublist

我有一个嵌套列表,列表中有两个值,一个单词和一个数字(按第一个值排序 - 单词):

    data=[["apple",2],["cake",5],["cake",8],["chocolate",3],["chocolate",9],["chocolate",10],["grapes",6]]

如何制作它以便尽可能高效地将具有相同单词的项目分组? 所以要使列表看起来像这样:

    data=[ [["apple",2]], [["cake",5],["cake",8]], [["chocolate",3],["chocolate",9],["chocolate",10]],[["grapes",6]] ]

“苹果”和“葡萄”是他们自己的列表,因为它们只在原始列表中出现一次。

怎么可以这样做?谢谢:))

1 个答案:

答案 0 :(得分:6)

它是itertools.groupby的用途:

>>> from operator import itemgetter
>>> from itertools import groupby
>>> data=[["apple",2],["cake",5],["cake",8],["chocolate",3],["chocolate",9],["chocolate",10],["grapes",6]]
>>> [list(g) for _,g in groupby(sorted(data,key=itemgetter(0)),itemgetter(0))]
[[['apple', 2]], [['cake', 5], ['cake', 8]], [['chocolate', 3], ['chocolate', 9], ['chocolate', 10]], [['grapes', 6]]]
>>> 

您可以使用operator.iemgetter作为sorted功能和groupby的密钥!