python在Ordered Dicts中追加具有新值

时间:2017-05-10 12:05:54

标签: python arrays dictionary

我的SQL结构如下所示:

CourseId StudentId CourseName
6001      101      Password
6002      102      Awareness
6003      101      Security

我正在使用tuples将数据提取到pyodbc cursor并创建有序字典列表以供处理。

for tup in tuples:
 doc = collections.OrderedDict()
 doc['studentid'] = tup.StudentId
 doc['courses'] = [{courseid: tup.CourseId, 'coursename': tup.CourseName}]
 insArray.append(doc)

现在,如果学生ID已经存在于insArray列表中的任何有序数组中,我需要在课程数组中附加课程详细信息。
对于上面给出的记录,预期的insArray结果将是:

[OrderedDict([('studentid', 101), ('courses', [{'courseid': 6001, 'coursename':'Password'},{'courseid': 6003, 'coursename':'security'}])]), OrderedDict([('studentid', 102), ('courses', [{'courseid': 6002, 'coursename':'Awareness'}])])]

1 个答案:

答案 0 :(得分:0)

而不是列表insArray作为记录集,您可以使用和OrderedDict,然后通过dict.get(key, default)的魔力附加到上一个课程列表

代码

insArray = collections.OrderedDict()

for tup in tuples:
    student_id = tup.StudentId
    courses = insArray.get(student_id, collections.OrderedDict()).get('courses', list())
    courses.append({'courseid': tup.CourseId, 'coursename': tup.CourseName})  
    # list.append alters the original list and returns None

    doc = collections.OrderedDict()
    doc['studentid'] = student_id
    doc['courses'] =  courses

    insArray[student_id] = doc

结果

OrderedDict([(101,
              OrderedDict([('studentid', 101),
                           ('courses',
                            [{'courseid': 6001, 'coursename': 'Password'},
                             {'courseid': 6003, 'coursename': 'Security'}])])),
             (102,
              OrderedDict([('studentid', 102),
                           ('courses',
                            [{'courseid': 6002,
                              'coursename': 'Awareness'}])]))])

列表

如果您希望列表为insArray,则可以使用list(insArray.values())

检索该列表