2016-12-11 32 views
0

辞書はこのように書式化されています:キーはドキュメント番号とキーワードのタプルで、値はドキュメント内のキーワードの頻度です。したがって、キーは(document1、keyword1)、(document1、keyword2)、(document1、keyword3)、 document3、keyword2)、(document3、keyword3)であり、値はnumberです。もちろんこれは小さな辞書です。私は、このソリューションを大量の文書とキーワードに適用したいと考えています。概念:辞書結果の2DマトリックスをPythonのCSVファイルに書き込む

辞書は、このようなとして作成されました:

document_count = {} 
try: 
    for doc in document_id_list: 
     indiv_doc = # records selected from a database 
     for w in words: 
      document_count.setdefault((doc, w), 0) 
      for entry in #unsorted list of text tokenized, set to lower case, and stripped of stop words: 
       if entry == w and (doc, entry) in document_count: 
         document_count[(patent, entry)] += 1 
    return document_count 

except Exception, e: 
    print "create claim storages" 
    print str(e) 
    pass 

私は2D行列のようなCSVに結果を書きたかったです。少なくとも、それは私がそれがどのように描かれているのか見てきたものです。

 keyword1 keyword2 keyword3 
document1 number number number 
document2 number number number 
document3 number number number 

python.orgと、このサイト上の他の質問、私はこれであるために得ていることに最も近い上のCSV機能のドキュメントを見てみると:

document1 keyword1 number 
document1 keyword2 number 
document1 keyword3 number 
document2 keyword1 number 
document2 keyword2 number 
document2 keyword3 number 
document3 keyword1 number 
document3 keyword2 number 
document3 keyword3 number 

これは、そのIコードからの結果であります

with open(os.path.join('C:/Users/Tara/PyCharmProjects/untitled/csv_results/', file_name), 
        'wb') as csvfile: 
    w = csv.writer(csvfile) 
    for key, value in available_dict.items(): 
     separate_keys = list(key) 
     w.writerow([separate_keys[0], separate_keys[1], value]) 

解決策の多くにはリストの理解が含まれていることに気付きましたが、正しいif文がどのようなものかわかりません。辞書を書くときやCSVファイルに書き込むときに変更を加えますか?

答えて

0

多くの既存のPythonライブラリはcsvファイルを作成するタスクを処理するので、単純なPythonの文と構造体を使いたいと思っています。

以下の主な戦略は、csvファイルの行を作成するジェネレータ関数を記述することです。これを行うために、関数はまず文書とキーワードを辞書から抽出してソートし、キーワードを含むヘッダー行を生成し、各文書の行を作成して生成します。

私は最小数のリストを使用していますあなたはここではいくつかのより多くの行

D = { 
    ('doc1', 'key1'): 2, ('doc1', 'key2'): 3, ('doc1', 'key3'): 4, 
    ('doc2', 'key1'): 4, ('doc2', 'key2'): 6, ('doc2', 'key3'): 8, 
    ('doc3', 'key1'): 6, ('doc3', 'key2'): 9, ('doc3', 'key3'): 12, 
} 

def gen_rows(D): 
    sorted_docs = sorted(set(t[0] for t in D)) 
    sorted_kwds = sorted(set(t[1] for t in D)) 
    yield [None,] + sorted_kwds 
    for d in sorted_docs: 
     yield [d,] + [D.get((d, k), 0) for k in sorted_kwds] 

for row in gen_rows(D): 
    print(row) 

を書く準備ができているならば容易に回避することができ内包表記は、出力、CSVファイルに書き込まれる準備ができて、行のリスト

[None, 'key1', 'key2', 'key3'] 
['doc1', 2, 3, 4] 
['doc2', 4, 6, 8] 
['doc3', 6, 9, 12] 
です
関連する問題