2017-02-20 6 views
-1

デリミタの右側に同じ値に基づいて結合したいテキスト行のリストがあります: "右側の値が同じ場合区切り文字の左側を追加し、区切り文字の右側のコピーを1つだけ保持して行を結合します。同じ値に基づいて複数の行を結合する方法

一覧:

file1: apple 
file2: car 
file1: car 
file3: people 
file4: stuff 
file5: people 

Desired_list:

file1:  apple 
file2,file1: car 
file3,file5: people 
file4:  sutff 
+0

あなたは辞書かb)ファイルを行とし、他のものを列として使うことができるようです( 'CountVectorizer'オブジェクトのように)。 – blacksite

+0

私はそれにアプローチする方法がわかりません。あなたがヒントを与えることができたら、私はそれを試してみることができます.. – Benjamin

+0

私のリストは、私が上に示した形式の単なるファイルです。 – Benjamin

答えて

0

あなたは区切り文字に基づいて行を分割して、辞書に埋め込まれたリストに追加します。私はこのためにdefaultdictを使用するのが好きです。

from collections import defaultdict 
d = defaultdict(list) 
for line in textfile: 
    fname, val = line.split(':') 
    d[val.strip()].append(fname.strip()) 

for key in d: 
    print ','.join(d[key]) + ':' + key 
0

これはさまざまな方法で実行できます。

これは、辞書をヘルパーデータ構造として使用することによってこれを行う1つの方法です。

私は辞書を作成しました。私は各右側の値をキーとして保存し、左側の値を値として保存します。キーがすでに存在する場合は、関連するファイルの値を追加します。

最後に、辞書を必要なリストに変換しています。

li = ["file1: apple","file2: car","file1: car","file3: people","file4: stuff","file5: people"] 

tmp_dict = {} 
for item in li: 
    l, r = item.split(":") 
    tmp_dict[r] = tmp_dict[r] + "," + l if tmp_dict.has_key(r) else l 

res = [v + ":" + k for k,v in tmp_dict.items()] 

print res 

>>> ['file4: stuff', 'file2,file1: car', 'file1: apple', 'file3,file5: people'] 
+0

ありがとう、私はそれを試してみましょう。 – Benjamin

関連する問題