我想交叉引用字典和django queryset来确定哪些元素分别具有唯一的dictionary['name']
和{
如下所示:
alldbTests = dbp.test_set.exclude(end_date__isnull=False) #django queryset
vctestNames = [vctest['name'] for vctest in vcdict['tests']] #from dictionary
dbtestNames = [dbtest.name for dbtest in alldbTests] #from django model
# Compare tests in protocol in fortytwo's db with protocol from vc
obsoleteTests = [dbtest for dbtest in alldbTests if dbtest.name not in vctestNames]
newTests = [vctest for vctest in vcdict if vctest['name'] not in dbtestNames]
必须生成中间的名称列表(上面的第2行和第3行),只是为了能够立即检查是否包含在其中,这让人感觉不太和谐。我有遗漏什么吗?我想我可以这样把两个列表理解放在一行中:
^{pr2}$但这似乎很难理解。在
编辑: 把初始状态想象成这样:
# vcdict is a list of django models where the following are all true
alldBTests[0].name == 'test1'
alldBTests[1].name == 'test2'
alldBTests[2].name == 'test4'
dict1 = {'name':'test1', 'status':'pass'}
dict2 = {'name':'test2', 'status':'pass'}
dict3 = {'name':'test5', 'status':'fail'}
vcdict = [dict1, dict2, dict3]
我不能转换成集合并取其不同之处,除非我将其分解为名称字符串,但是这样我就失去了对模型/字典其余部分的访问权,对吗?只有在这两种情况下都有相同类型的对象时,集合才会起作用。在
sets的}-操作应该可以帮助您更优雅地解决问题。在
intersection
-和{但由于您最初处理的是dicts,这些示例和讨论可能会提供一些启示:http://code.activestate.com/recipes/59875-finding-the-intersection-of-two-dicts
你在这里使用基本的集合运算。你可以把你的对象转换成集合,然后找到交集(想想维恩图):
在比较两个对象列表(pseudopython)时,集合非常有用:
^{2}$相关问题 更多 >
编程相关推荐