2017-10-16 72 views
-1

我有一個代碼返回一個字典,其中 名稱作爲鍵和對應的值爲 數字的元組。名稱後面的第一個數字控制相應元組中有多少個數字爲 (包含在元組中的數字從左到右爲 )。例如,文本行"Ali 6 7 6 5 12 31 61 9"具有6作爲名稱後面的第一個數字,並且該行文本 成爲具有關鍵字「Ali」的字典條目,並且對應值是由接下來的六個整數「Ali 「: (7,6,5,12,31,61)。通過使用文本文件的元組到Python字典

這是

Bella 5 2 6 2 2 30 4 8 9 2 
    Gill 2 9 7 54 67 
    Jin 3 26 51 3 344 23 
    Elmo 4 3 8 6 8 
    Ali 6 7 6 5 12 31 61 9 

我走的代碼電影的預期輸出

Ali : (7, 6, 5, 12, 31, 61) 
Bella : (2, 6, 2, 2, 30) 
Elmo : (3, 8, 6, 8) 
Gill : (9, 7) 
Jin : (26, 51, 3) 

,所以我做了這樣的

def get_names_num_tuple_dict(filename):  
    file_in = open(filename, 'r') 
    contents = file_in.read() 
    file_in.close() 
    emty_dict = {} 
    for line in contents: 
     data = line.strip().split() 
     key = data[0] 
     length = int(data[1]) 
     data = tuple(data[2:length + 2]) 
     emty_dict[key] = data 

    return emty_dict 

但我m有這個錯誤 length = int(data [1]) IndexError:列表索引超出範圍

任何人都可以請幫忙嗎?這將非常有幫助。我第一次學習字典時有點虛弱。

+0

你有甚至試圖使用調試器? –

+0

沒有了解該功能....它在Python程序中的位置? – dipte

回答

1

使用下面的代碼:

def get_names_num_tuple_dict(filename):  
    emty_dict = {} 
    with open(filename) as f: 
     for line in f: 
     data = line.strip().split() 
     key = data[0] 
     length = int(data[1]) 
     data = tuple(data[2:length + 2]) 
     emty_dict[key] = data 

    return emty_dict 


print(get_names_num_tuple_dict('my_filename')) 

輸出:

{'Bella': ('2', '6', '2', '2', '30'), 'Gill': ('9', '7'), 'Jin': ('26', '51', '3'), 'Elmo': ('3', '8', '6', '8'), 'Ali': ('7', '6', '5', '12', '31', '61')} 
0

這裏是發生了什麼:

contents = file_in.read() 

讀取您的文件轉換爲字符串。當你循環這個字符串時,它會逐個字符並給你IndexError: list index out of range

基本上嘗試使用:

for line in file_in: 
    data = line.strip().split() 
     ...