我的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'}])])]
答案 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())