Python合并列表的元素

时间:2013-07-13 16:09:50

标签: python

我想从列表中获取:

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

感谢

2 个答案:

答案 0 :(得分: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]]

答案 1 :(得分: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]]
>>>