-5

我想从此列表中获取:

[[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]]

谢谢

4

2 回答 2

0

如果你想保留第一个元素的顺序,这样的事情可能会起作用:

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]]
于 2013-07-13T16:21:07.010 回答
0

这是一个不需要导入的解决方案:

>>> 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]]
>>>
于 2013-07-13T17:04:34.243 回答