2

私はリストのリストを持っています:

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

リストに同じ日付が含まれている必要があります各最初の値はこのように出力するために2番目の値に参加します

[['13/03/2012', ['a', 'b', 'c', 'd', 'e', 'f']], ['26/03/2012', ['f']], ['02/04/2012', ['a']], ['09/04/2012', ['b']]]

誰か助けてくれませんか?

4

3 に答える 3

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

これをワンライナーで行うこともできますが、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']]]
于 2012-11-29T04:13:46.270 に答える
2

最初にこれらのリンクにアクセスすることをお勧めします

for_loops

辞書の作成方法

python辞書をタプルのリストに変換する方法

これはあなたを通り抜けるはずです..

In [7]: [['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']]]

In [8]: d= {}

In [9]: for item in l:
   ...:     if d.has_key(item[0]):
   ...:         d[item[0]].extend(item[1])
   ...:     else:
   ...:         d[item[0]] = item[1]
   ...:

In [10]: d
Out[10]:
{'02/04/2012': ['a'],
 '09/04/2012': ['b'],
 '13/03/2012': ['a', 'b', 'c', 'd', 'e', 'f'],
 '26/03/2012': ['f']}

In [11]: [[k,v] for k,v in d.items()]
Out[11]:
[['02/04/2012', ['a']],
 ['09/04/2012', ['b']],
 ['26/03/2012', ['f']],
 ['13/03/2012', ['a', 'b', 'c', 'd', 'e', 'f']]]
于 2012-11-29T04:11:56.683 に答える
1

avasal に似ていますが、これは defaultdict を使用するのに適した場所のようです

from collections import defaultdict
l = [['13/03/2012', ['a', 'b', 'c', 'd', 'e', 'f']], ['26/03/2012', ['f']], ['02/04/2012', ['a']], ['09/04/2012', ['b']]]
d = defaultdict(list)
for item in l:
    d[item[0]].extend(item[1])

print map(list, d.items())
于 2012-11-29T04:19:24.157 に答える