2017-06-02 179 views
1

我有一個Excel的兩列文件,如下所示:讀取Excel文件,並寫入詞典

Reviews| Numbers 
text1 | 1,3 
text2 | 2 
text3 | 1 
text4 | 2 
text5 | 1 

我讀的數據如下:

def read_xls(filename): 
    book = xlrd.open_workbook(filename) 
    sheet = book.sheet_by_index(0) 
    data=[] 
    for row_index in xrange(1, sheet.nrows): # skip heading row 
     reviews, numbers = sheet.row_values(row_index, end_colx=2) 
     data.append(reviews) 

但是,相反的將列作爲單獨的列表,我想要在字典中的結果如下:

{1: [text1, text3, text5], 2: [text2, text4], 3: [text1]} 

我該怎麼做?

+0

使用[熊貓](https://pandas.pydata.org/pandas-docs/ stable/index.html)庫將該文件作爲「Dataframe」讀取並使用[to_dict](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.to_dict.html)方法。 – vmg

+0

@vmg,因爲鍵將是列標題 –

回答

1

應該與代碼打交道下面

def read_xls(filename): 
    book = xlrd.open_workbook(filename) 
    sheet = book.sheet_by_index(0) 
    data = {} 
    for row_index in xrange(1, sheet.nrows): # skip heading row 
     reviews, numbers = sheet.row_values(row_index, end_colx=2) 
     number_list = numbers.split(",") 
     for number in number_list: 
      if number not in data: 
       data[number] = [] 
      data[number].append(reviews) 
+0

將無法​​工作我試過你的方法,但我面臨的問題是,在數字列中,也可能有多個數字。因此,審查需要兩個數字。我剛剛更新了我的問題,對不起。 – Arman

+0

我已經更新了我的答案。我假設數字參數是一個字符串。 – M07

+0

偉大的作品完美!謝謝! – Arman

1

您可以使用defaultdict

from collections import defaultdict 
data = defaultdict(list) 

for row_index in xrange(1, sheet.nrows): 
    reviews, numbers = sheet.row_values(row_index, end_colx=2) 
    data[numbers].append(reviews)