我有一个清单:
a_list
:
[{'score': 60, 'credit': 5, 'class': 'A01', 'subject': 'math'},
{'score': 70, 'credit': 5, 'class': 'A01', 'subject': 'music'},
{'score': 65, 'credit': 5, 'class': 'B01', 'subject': 'science'},
{'score': 35, 'credit': 5, 'class': 'C02', 'subject': 'math'}]
我从db查询(django)得到一个列表,每个subject
都有自己的pass_mark
pass_list = ClassData.objects.values('subject','pass_mark')
pass_list
:
[{'pass_mark': 50, 'subject_all': u'math'},
{'pass_mark':70, 'subject_all': u'science'},
{'pass_mark': 70, 'subject_all': u'music'}]
我必须比较a_list
来检查pass_mark
是否高于pass_list
所以结果列表是:
[{'score': 60, 'credit': 5, 'class': 'A01', 'subject': 'math'},
{'score': 70, 'credit': 5, 'class': 'A01', 'subject': 'music'}]
我的方法是:
result_list = []
for a in a_list:
check = [x for x in pass_list if x['subject_all'] == a['subject']]
if a['score'] >= check[0]['pass_mark']:
result_list.append(a)
print result_list
我想知道有没有更快更好的方法
因为a_list
将是一个大的未来
在
keys
是主语,值是scores
的地方做一个dict:输出:
只需通过
l2
构建dict,然后通过l
构建dict,并在其他地方使用常量功,因此解决方案是O(n)
,而不是您自己的二次方法。理想情况下,如果您能够首先创建sub
dict,这将是最好的方法。你知道吗相关问题 更多 >
编程相关推荐