2014-02-06 58 views
1

我在下面給出的格式的文本文件中的數據: -如何獲得一個字典內的字典在python

Monday  Maths 100 95 65 32 23 45 77 54 78 88 45 67 89 
Tuesday Science 45 53 76 78 54 78 34 99 55 100 45 56 78 
Wednesday English 43 45 56 76 98 34 65 34 45 67 76 34 98 

我想編寫Python代碼,這將產生一個輸出是這樣的: -

{ 
'monday': {'maths': [100 95 65 32 23 45 77 54 78 88 45 67 89}, 
'tuesday': {'Science':45 53 76 78 54 78 34 99 55 100 45 56 78}, 
'Wednesday': {'English': 43 45 56 76 98 34 65 34 45 67 76 34 98} 
} 

下面是摘錄:

fo = open('C:\\Users\\aman\\Documents\\dataVal.txt','r') 
data = fo.readlines() 

mydict = {} 
li = [] 
for i in range(len(data)): 
    row = data[i].split('\t') 
    timeKey = row[0] 
    type = row[1] 
    if mydict.has_key(timeKey): 
     li = mydict[timeKey] 
     li.append(type) 
     mydict[timeKey] = li 
    else: 
     li = [] 
     li.append(type) 
     mydict[timeKey] = li 
print mydict 

釷是給我的輸出,如: -

{「星期一」:「數學」,「科學」,「英語」]}

但我想這是上面提到的輸出。

有人可以幫忙嗎?

+3

你嘗試過一些沒有用的東西嗎?發佈你的嘗試,讓人們可以幫助你。 StackOverflow不是一個代碼寫入服務。 –

+0

週一內:{}或[] ??應該是字典,數學應該是關鍵。 –

+0

是的,我想星期一是關鍵,數學是它的價值,然後數學是關鍵,標誌是它的價值。同樣,星期二成爲關鍵,科學成爲它的價值,然後科學成爲關鍵,標誌成爲它的價值,在星期三也是如此。因此,使用我的代碼,我將星期一作爲關鍵和數學,科學和英語作爲它的價值觀,但現在我也希望分數作爲數學,科學和英語的價值分別添加 – sam

回答

0

這裏是我的解決方案:

dic = dict() 
    with open('txt', 'r') as fh: 
    for l in fh.readlines(): 
      try: 
       lines = l.split() 
       day, sub, num = lines[0], lines[1], [int(x) for x in lines[2:]] 
       dic.setdefault(day, {}) 
       dic[day][sub] = num 
      except Exception as er: 
       print er 
    print dic 

輸出:

{'Tuesday': {'Science': [45, 53, 76, 78, 54, 78, 34, 99, 55, 100, 45, 56, 78]}, 
    'Wednesday': {'English': [43, 45, 56, 76, 98, 34, 65, 34, 45, 67, 76, 34, 98]}, 
    'Monday': {'Maths': [100, 95, 65, 32, 23, 45, 77, 54, 78, 88, 45, 67, 89]}} 

讓我知道這是否爲你的作品。

+1

是的,這是有效的。謝啦。 – sam

+0

對不起還有一個問題。讓我們假設,而不是星期一,星期二和星期三,我有時間分別說16:00,17:00和18:00。如果是這樣的話,那麼它會拋出一個錯誤,指出int()的基數爲10:'16:00:00'的無效文字。對於基數爲10的int()無效文字:'16:00:00'無效文字爲int()以10爲底:'16:00:00' {} – sam

+0

您可能需要更改數據結構,讓我們看看。 –