2017-03-02 9 views
0

私は私の問題に対する答えを探していましたが、成功しませんでした。誰もがこれを実現するためにどのように任意のアイデアを持っています2番目の列を最初の列に基づいて行に変換します

a 1 2 3 4 
b 5 6 7 8 

a 1 
a 2 
a 3 
a 4 
b 5 
b 6 
b 7 
b 8 

私はこれに変換する必要があります。私はこのようになります言葉の大規模なリストでcsvファイルを持っていますか?

答えて

1

defaultdictを使用して、各文字と一致する数字のリストを保存します。

from collections import defaultdict 

dd = defaultdict(list) 

with open('input.csv') as f: 
    for line in f: 
     let, num = line.rstrip().split() 
     dd[let].append(num) 

with open('out.csv', 'w') as fo: 
    for k, v in dd.items(): 
     fo.write('%s %s\n' % (k, ' '.join(v))) 

またはあなたが出力ファイルを作成するとき

import csv 

... 

with open('data2.txt') as f: 
    for line in csv.reader(f, delimiter=' '): 
     let, num = line[:2] 
     dd[let].append(num) 

... 

あなたはあなたがオリジナルではないソート順序を与える(それをrecifyするために、この操作の後に順番を失い、いずれかのキーをソートすることができるcsvモジュールを使用することができます注文)。

with open('out.csv', 'w') as fo: 
    for k in sorted(dd.keys()): 
     fo.write('%s %s\n' % (k, ' '.join(dd[k]))) 

またはちょうどcollections.OrderedDictを使用するために、他の答えを適応させます。

+1

素晴らしいですが、それは私の問題を解決しました。私は出力をソートしようとはしませんでしたが、私がこれを使用しているツールでは、リストを何らかの順序で並べる必要はありません。答えてくれてありがとう! –

0

dictをここでコンパイルしたいと思うと思います。

d = {} 
for row in csvdata: 
    col1 = row[0] 
    col2 = row[1] 
    if col1 in d: 
     d[col1].append(col2) 
    else: 
     d[col1] = [col2] 

あなたが戻ってあなたはあなただけのdictのキーをループでコンパイルう言及したリスト形式のリストに辞書を取得する必要がある場合。

outlists = [] 
for col1 in d: 
    outlists.append([col1] + d[col1]) # Using '+' to concatenate lists. 

私は最初の列のキーでインデックス付けの辞書を使用して、想像、便利な、より多くのではないかの、ようにする必要があります。

関連する問題