2017-10-16 11 views
-1

という名前のキーと、 というタプルの対応する値を持つ辞書を返すコードがあります。名前の後の最初の数字は、対応するタプル内の の数を制御します(タプルに含まれる数字は、左から右へ となります)。たとえば、テキストの行"Ali 6 7 6 5 12 31 61 9"は、名前の後の最初の数字として6を持ち、このテキスト行 は、キーワード「Ali」を持つ辞書項目になり、 対応する値は、次の6つの整数「Ali ": (7,6,5,12,31,61)。テキストファイルを使用してPythonでタプル辞書

これは私が期待される出力はので、私は

このような
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 

しかし、私が」やった

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) 

ある

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 

からコードを取っているフィルムでありますこのエラーが発生したm length = int(data [1]) IndexError:リストインデックスが範囲外です

誰でもお手伝いできますか?それは本当に役に立ちます。私は初めての学習として辞書に少し弱いです。

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')) 

出力::次のコード

+0

あなたも、デバッガを使用しようとしたことがありますか? –

+0

その機能について知りませんでした....それはどこにありますか? – dipte

答えて

1

使用

{'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() 
     ... 
関連する問題