2017-10-16 8 views
-1

J'ai un code qui retourne un dictionnaire avec les noms comme les clés et les valeurs correspondantes qui sont des tuples de nombres. Le premier nombre après le nom contrôle combien de nombres sont dans le tuple correspondant (les nombres inclus dans le tuple sont pris de gauche à droite). Par exemple, la ligne de texte "Ali 6 7 6 5 12 31 61 9" a 6 comme premier chiffre après le nom et cette ligne de texte devient l'entrée du dictionnaire avec le mot-clé "Ali" et la valeur correspondante est un tuple composé des six entiers suivants "Ali ": (7, 6, 5, 12, 31, 61).Tuple à dictionnaire en python en utilisant le fichier texte

C'est le film que je prends le code de

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 

la sortie attendue est

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) 

donc je l'ai fait comme ça

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 

Mais je m ayant cette erreur length = int (data [1]) IndexError: indice de liste hors plage

Quelqu'un peut-il aider s'il vous plaît? Ce sera vraiment utile. Je suis un peu faible avec le dictionnaire en tant qu'apprentissage pour la première fois.

+0

Avez-vous même essayé d'utiliser le débogueur? –

+0

N'a pas appris à propos de cette fonction .... où est-ce dans le programme python? – dipte

Répondre

1

Utilisez le code suivant:

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

Sortie:

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

Voici ce qui se passe:

contents = file_in.read() 

lit votre fichier dans la chaîne. Lorsque vous bouclez sur cette chaîne, elle ira caractère par caractère et vous donnera IndexError: list index out of range.

essayer Fondamentalement utilisant:

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