2017-11-23 18 views
0

リスト内のいくつかのリストを連結する関数またはコードが必要です。私はこのサイトで解決策を探しましたが、私のニーズに合ったものは見つけられませんでした。また、結果なく多くのソリューションを試しました。リストのリストを最初の要素のPythonを比較して連結する

私は自分のコードからこの例を持っている:

リストは、次のとおりです。

[['He', 'is', [0, 1, 2, 3, 4, 5, 6, 7]], 
['is', 'angry.', [0, 1]], 
['is', 'happy.', [2, 3]], 
['is', 'sleep.', [4]], 
['angry.', 'He', [0, 1, 2, 3, 4, 5, 6, 7]], 
['happy.', 'He', [0, 1, 2, 3, 4, 5, 6, 7]], 
['going.', 'He', [0, 1, 2, 3, 4, 5, 6, 7]], 
['sleep.', 'He', [0, 1, 2, 3, 4, 5, 6, 7]], 
['sad.', 'He', [0, 1, 2, 3, 4, 5, 6, 7]]] 

私はグループに同じ第1の値を持つリストを必要とし、例えば'によって'出力は次のようになります:

[['He', 'is', [0, 1, 2, 3, 4, 5, 6, 7]], 
['is', ['angry.',' happy.', 'sleep.'], [[0, 1], [2, 3], [4]]], 
['angry.', 'He', [0, 1, 2, 3, 4, 5, 6, 7]], 
['happy.', 'He', [0, 1, 2, 3, 4, 5, 6, 7]], 
['going.', 'He', [0, 1, 2, 3, 4, 5, 6, 7]], 
['sleep.', 'He', [0, 1, 2, 3, 4, 5, 6, 7]], 
['sad.', 'He', [0, 1, 2, 3, 4, 5, 6, 7]]] 

どのような提案ですか?

+0

信じますあなたは、提案された出力の2行目にタイプミスがあります。あなたが意図したものであれば、おそらく閉じ括弧がありませんか? – NikT

+0

はい、本当にありがとうございます。私は編集して、今は明らかだと思います。 ONE BIG LISTにはリストがあります。 –

答えて

0

あなたはこのように、その後、グループのデータを圧縮し、それらをマージし、内側のリストの最初の値を持つグループにitertools.groupbyでリストを試すことができます。

from itertools import groupby 
from operator import itemgetter 
source = [['He', 'is', [0, 1, 2, 3, 4, 5, 6, 7]], 
['is', 'angry.', [0, 1]], 
['is', 'happy.', [2, 3]], 
['is', 'sleep.', [4]], 
['angry.', 'He', [0, 1, 2, 3, 4, 5, 6, 7]], 
['happy.', 'He', [0, 1, 2, 3, 4, 5, 6, 7]], 
['going.', 'He', [0, 1, 2, 3, 4, 5, 6, 7]], 
['sleep.', 'He', [0, 1, 2, 3, 4, 5, 6, 7]], 
['sad.', 'He', [0, 1, 2, 3, 4, 5, 6, 7]]] 
groups = groupby(source, itemgetter(0)) 
result = [] 
for key,data in groups: 
    list_data = list(data) 
    if len(list_data) == 1: 
     result.append(list_data[0]) 
    elif len(list_data) >1: 
     zip_data = zip(*list_data) # list(zip(*list_data)) for python 3 
     result.append([key]+[list(zip_data[1])]+[list(zip_data[2])]) 

result次のようになります。

[['He', 'is', [0, 1, 2, 3, 4, 5, 6, 7]], 
['is', ['angry.', 'happy.', 'sleep.'], [[0, 1], [2, 3], [4]]], 
['angry.', 'He', [0, 1, 2, 3, 4, 5, 6, 7]], 
['happy.', 'He', [0, 1, 2, 3, 4, 5, 6, 7]], 
['going.', 'He', [0, 1, 2, 3, 4, 5, 6, 7]], 
['sleep.', 'He', [0, 1, 2, 3, 4, 5, 6, 7]], 
['sad.', 'He', [0, 1, 2, 3, 4, 5, 6, 7]]] 
+0

このエラーは次のようになります:TypeError: 'zip'オブジェクトはこの行にサブスクリプトできません:result.append([key] + [list(zip_data [1])] + [list(zip_data [2]))) Pythonを使用して3.6 –

+0

はい、それはzip_data = zip(* list_data)の行を編集してzip_data = list(zip(* list_data))になります。 –

+0

@NujudAliあなたは正しいです。これはPython 2用です。あなたの発見に:) –

関連する問題