2013-09-23 62 views
1

這裏我有一個函數,當我閱讀時,只返回最後一行。我究竟做錯了什麼?閱讀從文本文件到字典python的所有行

def read(): 
    with open("text.txt","r") as text: 
     return dict(line.strip().split() for line in text) 

的文本文件是非常簡單的,兩列

asd 209 
asd 441 
asd 811 
asd 160 
asd 158 

我想讀所有的時間到字典中,asd一部分鍵和數字作爲值。

+0

什麼問題?有錯誤嗎?你沒有得到你所期望的全部數據嗎? – Veedrac

+0

你想讓asd指向所有相關值的列表嗎?如果不是,你應該使用一個列表而不是字典! – Shashank

+0

問題是字典需要唯一鍵,因此我不能使用不同值的相同鍵,我需要爲每個值創建一個唯一鍵。 – GivenPie

回答

5

字典鍵必須是唯一的。您在該文件中只有一個唯一鍵。

你在本質上是同一個鍵指定不同的價值,只有當先前的值將被覆蓋的最後一個值可見:

>>> d = {} 
>>> d['asd'] = 209 
>>> d['asd'] = 441 
>>> d 
{'asd': 441} 

要存儲最大值,使用:

def read(): 
    res = {} 
    with open("text.txt","r") as text: 
     for line in text: 
      key, value = line.split() 
      if int(value) > res.get(key, -1): 
       res[key] = int(value) 
    return res 
+0

哦......真的。這就說得通了!!那麼這可以讓字典採取最大的密鑰,而不是最後一個? – GivenPie

+1

@GivenPie:循環遍歷每一行,並且只在該值高於先前存儲的值時才分配給該鍵。 –

+0

好的。感謝它的工作。 – GivenPie

0

要追加數值到一個列表中爲每個辭典鍵可以使用defaultdict

from collections import defaultdict 

def read(): 
    result = defaultdict(list) 
    with open("text.txt","r") as text: 
     for line in text: 
      key, value = line.strip().split() 
      result[key].append(value) 
    return result