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

PYTHON: Create sublists of same values from nested list into one list

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

    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]] ]

"apple" 和 "grapes" 是它们自己的列表,因为它们在原始列表中只出现一次。

这是怎么做到的?谢谢:)

这就是 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!