2016-10-24 29 views
0

我需要從文本文件中讀取行(我已經完成了此操作)。這些行格式相同: 「名稱」,「號碼」,「號碼」。 我在行中讀取並將每行放在單獨的列表中,以製作列表的列表。 我需要將第三個數字除以每行的第二個數字,然後將結果數字作爲值存儲在字典中,並以「Name」作爲鍵。在列表中劃分兩個數字,然後將該數字存儲爲字典中的值

for line in f: 
    list_words = [line.strip().split(',') for line in f] 

這是我到目前爲止,假設f是一個文本文件在已經閱讀我使用Python 3

回答

3

您可以使用字典解析

list_words = [line.strip().split(',') for line in f] 
d = {lst[0]: float(lst[2])/float(lst[1]) for lst in list_words} 

請注意,創建list_words的列表理解消除了對封閉for循環的需要。

警告:如果您的一個因子的值爲零,將會產生一個ZeroDivisionError


另一種方法是在for循環的每個迭代上list_words添加新鍵值對:

d = {} 
for lst in list_words: 
    try: 
     d[lst[0]] = float(lst[2])/float(lst[1]) 
    except ZeroDivisionError: 
     pass 
+0

解包在這裏也適用,不是嗎? '{a:float(c)/ float(b)for a,b,c in list_words} –

+1

@PatrickHaugh用更多的文字來解釋工作原理:) –

+0

我可以使用try和except來處理ZeroDivisionError?例如: – Compsciguy

0

喜歡的東西

d = {l[0]:float(l[1])/float(l[2]) for l in list_words} 

將創建鍵安裝在一本字典第一個(即位置0)項目。

注:

  1. 如果你剛剛讀入文件,Python會認爲這兩個數字字符串,因此需要將它們轉換爲浮動。
  2. 你真的應該考慮一些錯誤檢查 - 例如如果沒有確切的三個項目,那該怎麼辦?如果數字無法解析會怎麼樣(例如,如果名稱字段中的內容包含逗號,會發生什麼情況?)
相關問題