使用以下字典列表:
user_course_score = [
{'course_id': 1456, 'score': 56},
{'course_id': 316, 'score': 71}
]
courses = [
{'course_id': 1456, 'name': 'History'},
{'course_id': 316, 'name': 'Science'},
{'course_id': 926, 'name': 'Geography'}
]
将它们组合到以下词典列表中的最佳方法是什么:
user_course_information = [
{'course_id': 1456, 'score': 56, 'name': 'History'},
{'course_id': 316, 'score': 71, 'name': 'Science'},
{'course_id': 926, 'name': 'Geography'} # Note: the student did not take this test
]
或者以不同方式存储数据会更好,例如:
courses = {
'1456': 'History',
'316': 'Science',
'926': 'Geography'
}
感谢您的帮助。
答案 0 :(得分:22)
这是一个可能的解决方案:
def merge_lists(l1, l2, key):
merged = {}
for item in l1+l2:
if item[key] in merged:
merged[item[key]].update(item)
else:
merged[item[key]] = item
return merged.values()
courses = merge_lists(user_course_score, courses, 'course_id')
产地:
[{'course_id': 1456, 'name': 'History', 'score': 56},
{'course_id': 316, 'name': 'Science', 'score': 71},
{'course_id': 926, 'name': 'Geography'}]
如您所见,我使用字典('合并')作为中途点。当然,您可以通过不同方式存储数据来跳过步骤,但这也取决于您对这些变量的其他用途。
一切顺利。
答案 1 :(得分:3)
字典基本上是(键,值)对的列表。
在你的情况下,
user_course_score可以只是(course_id,得分)的字典而不是字典列表(你只是不必要地使它复杂化)
类似地,课程可以只是(course_id,name)
的字典你最后建议的是正确的方法:)
答案 2 :(得分:2)
courses
是存储数据的正确方法;然后你可以做这样的事情来存储每用户数据:
courses = {
1456: 'History',
316: 'Science',
926: 'Geography'
} # Note the lack of quotes
test_scores = {
1456: { <user-id>: <score on History test> },
316: { <user-id>: <score on History test> },
926: { <user-id>: <score on History test> }
}
答案 3 :(得分:1)
您也可以尝试:
[
course.update(score) for course
in courses for score in user_course_score
if course['course_id'] == score['course_id']
]
:)