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()是解决此问题的正确工具。有人可以帮我解决这个问题吗?
你认为这是一份工作是对的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)