어떤 요소가 고유한지 확인하기 위해 사전과 장고 쿼리 세트를 교차 참조하고자합니다. dictionary['name']
및 djangoModel.name
값입니다. 에 내가 지금하고 있어요 방법은 다음과 같습니다Pythonic 방법은 특정 속성에 대한 사전 목록을 구문 분석합니까?
- 이 사전의 목록을 만들기 [ '이름']
- 이 djangoModel.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]
세대에 가지고 unpythonic 느낌 그 직후에 포함 여부를 확인할 수 있도록 중간 이름 목록 (위의 2 행과 3 행)을 삭제하십시오. 내가 놓친 게 있니? 나는이 같은 한 줄에 두 개의 지능형리스트를 넣을 수도있을 것 같군요 :
obsoleteTests = [dbtest for dbtest in alldbTests if dbtest.name not in [vctest['name'] for vctest in vcdict['tests']]]
을하지만 그것은 따라하기 어려워 보인다.
편집 :
# 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]
나는 세트로 변환하고 난 그냥 이름 문자열까지 일을 제거하지 않는 한 차이를 가지고,하지만 난 잃을 수 없습니다 :이 같은 초기 상태의 생각해 나머지 모델/사전에 대한 액세스, 맞습니까? 두 경우 모두 같은 유형의 객체를 사용하면 세트 만 작동합니다.
당신이 몇 가지 예제 데이터를 제공시겠습니까를? 질문을 쉽게 시각화 할 수 있습니다. 그러나 너무 깊이 들여다 보지 않고 두 개의 서로 다른 이름 목록에서 고유 한 멤버를 찾고있는 경우 두 개의'set() '컨테이너를 비교할 수있는 완벽한 장소 인 것 같습니다. – jathanism