J'essaie de définir une procédure, involved(courses, person)
, qui prend en entrée une structure de cours et une personne et renvoie un dictionnaire décrivant tous les cours auxquels la personne participe.
Voici ma fonction involved(courses, person)
:
def involved(courses, person):
for time1 in courses:
for course in courses[time1]:
for info in time1[course]:
print info
Voici mon dictionnaire:
courses = {
'feb2012': { 'cs101': {'name': 'Building a Search Engine',
'teacher': 'Dave',
'assistant': 'Peter C.'},
'cs373': {'name': 'Programming a Robotic Car',
'teacher': 'Sebastian',
'assistant': 'Andy'}},
'apr2012': { 'cs101': {'name': 'Building a Search Engine',
'teacher': 'Dave',
'assistant': 'Sarah'},
'cs212': {'name': 'The Design of Computer Programs',
'teacher': 'Peter N.',
'assistant': 'Andy',
'prereq': 'cs101'},
'cs253':
{'name': 'Web Application Engineering - Building a Blog',
'teacher': 'Steve',
'prereq': 'cs101'},
'cs262':
{'name': 'Programming Languages - Building a Web Browser',
'teacher': 'Wes',
'assistant': 'Peter C.',
'prereq': 'cs101'},
'cs373': {'name': 'Programming a Robotic Car',
'teacher': 'Sebastian'},
'cs387': {'name': 'Applied Cryptography',
'teacher': 'Dave'}},
'jan2044': { 'cs001': {'name': 'Building a Quantum Holodeck',
'teacher': 'Dorina'},
'cs003': {'name': 'Programming a Robotic Robotics Teacher',
'teacher': 'Jasper'},
}
}
Quand j'essaye de tester mon code:
>>>print involved(courses, 'Dave')
Python me donne une erreur:
for info in time1[course]:
TypeError: string indices must be integers, not str
Comment puis-je résoudre ce problème?
Merci.
time1
est la clé du dictionnaire le plus externe, par exemple, feb2012
. Vous essayez donc d'indexer la chaîne, mais vous ne pouvez le faire qu'avec des entiers. Je pense que ce que tu voulais était:
for info in courses[time1][course]:
En parcourant chaque dictionnaire, vous devez ajouter un autre nid.
En fait, je pense qu'une approche plus générale de la lecture en boucle du dictionnaire consiste à utiliser iteritems () :
# get tuples of term, courses
for term, term_courses in courses.iteritems():
# get tuples of course number, info
for course, info in term_courses.iteritems():
# loop through info
for k, v in info.iteritems():
print k, v
sortie:
assistant Peter C.
prereq cs101
...
name Programming a Robotic Car
teacher Sebastian
Ou, comme Matthias l'a mentionné dans les commentaires, si vous n'avez pas besoin de clés, vous pouvez simplement utiliser itervalues () :
for term_courses in courses.itervalues():
for info in term_courses.itervalues():
for k, v in info.iteritems():
print k, v