错误:' str'对象没有属性'更新'在向dict添加密钥时

时间:2015-07-29 20:39:46

标签: python django python-2.7 dictionary

相当新手的问题,所以请耐心等待我......

我使用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}

我做错了什么?

2 个答案:

答案 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]

有时创建一个类更好,而不是拥有那种复杂的数据结构。)。