连接列表由多个列表组成,这些列表在python中具有相同的值

kus*_*hne 2 python tuples list

我有清单列表:

[['13/03/2012', ['a']], ['13/03/2012', ['b', 'c', 'd']], ['13/03/2012', ['e', 'f']], ['26/03/2012', ['f']], ['02/04/2012', ['a']], ['09/04/2012', ['b']]]
Run Code Online (Sandbox Code Playgroud)

我需要列表包含相同的日期在每个第一个值将加入第二个值输出像这样

[['13/03/2012', ['a', 'b', 'c', 'd', 'e', 'f']], ['26/03/2012', ['f']], ['02/04/2012', ['a']], ['09/04/2012', ['b']]]
Run Code Online (Sandbox Code Playgroud)

请有人可以帮帮我吗?

Roc*_*key 6

你可以尝试使用itertools.这会按日期对列表进行分组,然后遍历键/组,创建一个将键作为第一个元素和"展平"列表值的列表:

In [51]: from itertools import groupby

In [52]: result = []

In [53]: for key, group in groupby(l, key=lambda x: x[0]):
   ....:     inner = [key, [item for subg in group for item in subg[1]]]
   ....:     result.append(inner)
   ....:
   ....:

In [54]: result
Out[54]:
[['13/03/2012', ['a', 'b', 'c', 'd', 'e', 'f']],
 ['26/03/2012', ['f']],
 ['02/04/2012', ['a']],
 ['09/04/2012', ['b']]]
Run Code Online (Sandbox Code Playgroud)

你可以做一个单行,但除了超过80个字符,它甚至可读性低于第一个版本,应该可以避免:)

In [57]: result = [[key, [item for subg in group for item in subg[1]]] for key, group in groupby(l, key=lambda x: x[0])]

In [58]: result
Out[59]:
[['13/03/2012', ['a', 'b', 'c', 'd', 'e', 'f']],
 ['26/03/2012', ['f']],
 ['02/04/2012', ['a']],
 ['09/04/2012', ['b']]]
Run Code Online (Sandbox Code Playgroud)