如果你想保留的子列表中的子列表和项目接近原始越好,你可以利用OrderedDict
两种排序:
from collections import OrderedDict
mylist = [['2', '12/12/2016'], ['4', '10/12/2016'], ['5', '08/12/2016'],
['4', '10/12/2016'], ['7', '12/12/2016'], ['10', '12/12/2016'],
['11', '08/12/2016'], ['4', '12/12/2016'], ['10', 'test']]
res = OrderedDict()
for s1, s2 in mylist:
res.setdefault(s1, OrderedDict())[s2] = True
res = [[k] + list(v) for k, v in res.items()]
print(res)
输出:
[['2', '12/12/2016'], ['4', '10/12/2016', '12/12/2016'], ['5', '08/12/2016'],
['7', '12/12/2016'], ['10', '12/12/2016', 'test'], ['11', '08/12/2016']]
以上construc ts OrderedDict
其中键是列表中的第一个元素,值为OrderedDict
对象。二级字典包含列表中的第二个元素作为键。第二级值不相关,OrderedDict
仅用于因为Python标准库没有OrderedSet
。
更新:假设
- 子列表有第三个元素是两个数字的列表
- 结果清单应基于第一个元素的第一次出现,责令
- 子列表应该只包含独特的双并根据该对的第一个数量进行排序
您可以使用set
from collections import OrderedDict
mylist = [['1', 'string1', [22,25]], ['4', 'string1', [12,19]],
['4', 'string3', [48,53]], ['8', 'string3', [14,19]],
['4', 'string3', [48,53]]]
res = OrderedDict()
for s, _, l in mylist:
res.setdefault(s, set()).add(tuple(l))
res = [[k] + sorted(v) for k, v in res.items()]
print(res)
输出:在第二个层次,构建结果时,对排序
[['1', (22, 25)], ['4', (12, 19), (48, 53)], ['8', (14, 19)]]
我觉得在这种情况下字典会很方便 – depperm
结果的排序是否重要? – niemmi
@niemmi,是的订购事项 – Reman