2017-09-22 5 views
-1

나는 병합하고 싶은 수천 개의 복제본이있는 데이터베이스 테이블을 가지고 있습니다. 나는 psycopg2.extras을 사용하여 쿼리를 실행하고 결국 사전 목록에서 결과를 얻습니다.목록에서 사전을 반환합니다. 사전 키가 값과 같습니다.

dict_cur = conn.cursor(cursor_factory=psycopg2.extras.RealDictCursor) 
query = """SELECT DISTINCT pat_uid, pat_first_name, pat_last_name, pat_dob_dt, pat_chi_no, 
     pat_addr, wtg_uid, wtg_pat_uid, std_uid, std_pat_uid, work_uid, work_pat_uid 
     from ((patients left outer join waiting 
     on (pat_uid = wtg_pat_uid)) left outer join studies 
     on (std_pat_uid = pat_uid) left outer join worklist 
     on (work_pat_uid = pat_uid)) 
     where (pat_first_name, pat_last_name, pat_chi_no) 
     in (SELECT pat_first_name, pat_last_name, pat_chi_no from patients 
     group by pat_first_name, pat_last_name, pat_chi_no 
     HAVING count(*) >= 2) AND 
     pat_chi_no ~ '^[0-9]{10,10}\$' 
     order by pat_last_name asc, pat_first_name asc, 
     pat_dob_dt asc""" 

# Execute query - find all duplicate patients 
dict_cur.execute(query) 
# python list containing complete query results 
res = dict_cur.fetchall() 

그때 그때 각각의 고유 한 pat_chi_no을 통해 루프를 계획하고 각 pat_chi_no 일치하는 사전을 반환

chi_set = set() 
for n in res: 
     chi_set.add(n['pat_chi_no']) 

세트를 사용하여 각 환자의 고유 ID 번호를 찾을 수 있습니다. 어떻게 효율적으로 수행 할 수 있습니까? 나는이 내가 아는이 만 반환 한 사전이 경우 4 개 항목이 있어야 How can you print a key given a value in a dictionary for Python?

def build_dict(seq, key): 
    return dict((d[key], dict(d, index=index)) for (index, d) in enumerate(seq)) 

info_by_chi = build_dict(res, key="pat_chi_no") 
info_by_chi["1111111111"] 

에서 편집 한 다음 시도했다. 사전의 전체 목록의 하위 집합이 될 것

샘플 출력은 약 혼란에 필요한 이유 예를 들어 lst['pat_chi_no'] == 1111111111

{'index': 4218, 
'pat_addr': '10 DOWNING STREET', 
'pat_chi_no': '1111111111', 
'pat_dob_dt': datetime.date(1937, 9, 24), 
'pat_first_name': 'JOHN', 
'pat_last_name': 'DOE', 
'pat_uid': 35359, 
'std_pat_uid': 35359, 
'std_uid': 37138, 
'work_pat_uid': 35359, 
'work_uid': 366, 
'wtg_pat_uid': 35359, 
'wtg_uid': 11307} 


{'index': 122, 
    'pat_addr': '10 DOWNING STREET', 
    'pat_chi_no': '1111111111', 
    'pat_dob_dt': datetime.date(1937, 9, 24), 
    'pat_first_name': 'JOHN', 
    'pat_last_name': 'DOE', 
    'pat_uid': 1233, 
    'std_pat_uid': 3455, 
    'std_uid': 2323, 
    'work_pat_uid': 2455, 
    'work_uid': 366, 
    'wtg_pat_uid': 3455, 
    'wtg_uid': 1127} 
+2

최종 출력물을 원하는대로 표시하십시오. –

답변

2

내가 볼 수없는 경우 목록 만 사전을 포함하는 것, 즉 dict 또는 그런 것. 사전 목록이있는 경우 반복하여 일치하는 단어를 찾아야합니다. 간단한 목록을 통해 이해할 수 있습니다.

[d for d in res if d['pat_chi_no'] == '1111111111'] 
+0

똑똑한 직업입니다. 나는 목록 이해력을 배울 필요가있다. 많은 감사 – moadeep