相当新手的问题,所以请耐心等待我......
我使用python 2.7.8与Django 1.7.1。
我试图在for循环中为dict添加一个键。
courseProgress = dict()
for child in children:
courseProgress[child.id] = str(child.child_firstname)
for individualCourse in allCourses:
#get the total number of items within a course
totalContentsCount = len(courseContents[individualCourse.course_id])
#get the total number of completed steps for this course from the rewardHistory that we obtained earlier
thisCourseProgress = len(allCourses.filter(course = individualCourse.course_id))
#divide to get a percentage
thisProgress = float(thisCourseProgress) / float(totalContentsCount)
currentCourseID = int(individualCourse.course_id)
thisCourse = {
'progress' : thisProgress,
'courseInfo' : courseContents[currentCourseID]
}
courseProgress[individualCourse.child.id].update({currentCourseID : thisCourse})
最后一行产生错误:错误:' str'对象没有属性'更新'
显然(?)它将courseProgress [individualCourse.child.id]视为字符串,而不是我试图添加子键的字典中的键。我想这是因为我得到了返回的值(这是一个字符串)。在交互式提示中,我得到以下内容:
>>>courseProgress[individualCourse.child.id]
'Sophie'
我不确定为什么会这样......
之后的结果是将子密钥添加到courseProgress[individualCourse.child.id]
(例如courseProgress[1]
),并且该子密钥将采用最终格式{1 : thisCourse}
我做错了什么?
答案 0 :(得分:0)
这个怎么样......
for child in children:
courseProgress[child.id] = {
name: str(child.child_firstname),
courses: {}
}
然后
courseProgress[individualCourse.child.id]['courses'].update({currentCourseID : thisCourse})
答案 1 :(得分:0)
您正在尝试更新()字符串而不是字典。 我认为你应该有一个不同的数据结构,现在你有一个dict,其中键是整数,值是字符串。 你需要一个dict的词典。
{key1: {}, key2: {}}
您可以简单地更改{}的str()。
另一种不混合的方法"名称"和" couses"是做
之类的事情for child in children:
courseProgress[child.id] = {
'name': child.child_firstname, #child_name
'courses': {} #map of courses course_id: course
}
然后你可以这样做:
courses = courseProgress[individualCourse.child.id]['courses']
courses.update({currentCourseID:thisCourse})
如果你想要给定child.id的信息,你当然可以做 couseProgress [childID的] ['课程'] [someCourseId]
有时创建一个类更好,而不是拥有那种复杂的数据结构。)。