2016-12-11 216 views
0

寫入詞典結果的2D矩陣到CSV文件我有字典格式化這種方式:關鍵是文件號和所述關鍵字的元組,並且該值是關鍵字的文檔中的頻率。 因此,按鍵會(文檔1,關鍵字1),(文檔1,關鍵字2),(文檔1,KEYWORD3),(文件2,關鍵字1),(文件2,關鍵字2),(文件2,KEYWORD3),(文件3,關鍵字1),(文件3,KEYWORD2)和(文件3,KEYWORD3)並將該值將是數。當然這是一本小字典。我希望該解決方案適用於大集的文件和關鍵字。概念:在Python

字典創建爲這樣:

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 

我想寫的結果到CSV像2D矩陣。至少,這是我所見過的描述。

 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 

這是從代碼的結果,我採寫:

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

我注意到,很多解決方案都涉及列表理解,但我不知道語句應該怎樣纔是正確的。我將作出改變,當我寫一本字典,或當我寫的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]