我想从此列表中获取:
[[a,10],[b,3],[c,4],[a,6],[d,11],[c,6],[a,7],[d,10]]
这:
[[a,10,6,7][b,3][c,4,6][d,11,10]]
谢谢
我想从此列表中获取:
[[a,10],[b,3],[c,4],[a,6],[d,11],[c,6],[a,7],[d,10]]
这:
[[a,10,6,7][b,3][c,4,6][d,11,10]]
谢谢
如果你想保留第一个元素的顺序,这样的事情可能会起作用:
from collections import OrderedDict
def merge(seq):
d = OrderedDict()
for k,v in seq:
d.setdefault(k, []).append(v)
result = [[k]+v for k,v in d.iteritems()]
return result
这将遍历序列中的每一对。对于每个k
,我们要么在字典中获取与之关联的列表d
(如果我们已经看过它),要么创建一个新的空列表并获取它。(就是这样setdefault
做的。)在任何一种情况下,我们都会附加v
到该列表中。最后,我们遍历字典中的每个键、值对,d
并以您想要的形式创建一个新列表。例子:
>>> s = [['a',10],['b',3],['c',4],['a',6],['d',11],['c',6],['a',7],['d',10]]
>>> merge(s)
[['a', 10, 6, 7], ['b', 3], ['c', 4, 6], ['d', 11, 10]]
这是一个不需要导入的解决方案:
>>> lis = [['a',10],['b',3],['c',4],['a',6],['d',11],['c',6],['a',7],['d',10]]
>>> dct = {a:[] for a,_ in lis}
>>> for b,c in lis: dct[b]+=[c]
...
>>> sorted([[d]+e for d,e in dct.items()])
[['a', 10, 6, 7], ['b', 3], ['c', 4, 6], ['d', 11, 10]]
>>>