根据共同的第一项将子列表排序为新的子列表

drb*_*sen 4 python sorting list

我有大量的二元子列表,它们是名为 的列表的成员mylist

mylist = [['AB001', 22100],
          ['AB001', 32935],
          ['XC013', 99834],
          ['VD126', 18884],
          ['AB001', 34439],
          ['XC013', 86701]]
Run Code Online (Sandbox Code Playgroud)

我想根据mylist子列表是否包含与第一项相同的字符串来排序新的子列表。例如,这就是我正在寻找要输出的代码:

newlist = [['AB001', 22100], ['AB001', 32935], ['AB001', 34439]],
          [['XC013', 99834], ['XC013', 86701]],
          [['VD126', 18884]]
Run Code Online (Sandbox Code Playgroud)

这是我尝试编码的方式:

mylist = sorted(mylist)
newlist = []
for sublist in mylist:
    id = sublist[0]
if id == next.id:
    newlist.append(id)
print newlist
Run Code Online (Sandbox Code Playgroud)

我还试图了解是否itertools.groupby()是解决此问题的正确工具。有人可以帮我解决这个问题吗?

agf*_*agf 6

你认为这是一份工作是对的groupby

from itertools import groupby
from operator import itemgetter

mylist = [['AB001', 22100],
          ['AB001', 32935],
          ['XC013', 99834],
          ['VD126', 18884],
          ['AB001', 4439],
          ['XC013', 86701]]

print([list(value) for key, value in groupby(sorted(mylist), key=itemgetter(0))])
Run Code Online (Sandbox Code Playgroud)

这将为您提供一个列表列表,按子列表中的第一项分组。

[[['AB001', 4439], ['AB001', 22100], ['AB001', 32935]], 
 [['VD126', 18884]], 
 [['XC013', 86701], ['XC013', 99834]]]
Run Code Online (Sandbox Code Playgroud)

  • 是的,但它更慢,这就是`itemgetter` 的用途。 (2认同)