我有一个嵌套列表,列表中有两个值,一个单词和一个数字(按第一个值排序 - 单词):
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]] ]
“苹果”和“葡萄”是他们自己的列表,因为它们只在原始列表中出现一次。
怎么可以这样做?谢谢:))
答案 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
的密钥!