2014-11-05 5 views
0

특정 열을 추출하여 MySQLdb을 사용하여 얻은 레코드에서 그룹화하려고합니다.특정 열을 추출하고 Python 사전에서 그룹화하십시오.

나는 단지 3 열 추출 할
import _mysql 
cdb=_mysql.connect(host="myhost",user="root", 
        passwd="******",db="my_db") 
qry = "select col1,col2,col3,col4,col5,col6 from mytable" 

cdb.query(qry) 

resultset = cdb.store_result() 

records = resultset.fetch_row(0,1) # 0 - no limit, 1 - output is in dictionary form 

: 기록에서 COL1, COL3 및 col4을이 세 열 (COL1의 모든 고유 한 조합을, 즉 사용하여 고유 한 값 그룹을 만들고 싶어, COL3 나는 다음 코드를 작성했습니다 , col4). 고유 한 값을 찾기 위해 set() 데이터 유형을 사용해야한다는 것을 알고 그것을 사용하려고 시도했지만 어떤 성공도 찾지 못했습니다. 그것을위한 좋은 해결책이 무엇인지 알려주십시오.

나는 데이터베이스에 수천 개의 레코드가 있습니다. 다음 고유하지 않은를 제거

def filter_unique(records, columns): 
    unique = set(tuple(rec[col] for col in columns) for rec in records) 
    return [dict(zip(columns, items)) for items in unique] 

그것은 먼저 각 레코드에 대한 열 값의 튜플을 생성합니다 :이 솔루션과 함께 올라와있다

({ 
    'col1':'data11', 
    'col2':'data11', 
    'col3':'data13', 
    'col4':'data14', 
    'col5':'data15', 
    'col6':'data16' 
}, 
{ 
    'col1':'data21', 
    'col2':'data21', 
    'col3':'data23', 
    'col4':'data24', 
    'col5':'data25', 
    'col6':'data26' 
}) 

답변

1

: 나는 다음과 같은 방법으로 기록의 출력을 얻고있다 set()을 사용하여 항목을 생성 한 다음 튜플의 각 값에 이름을 지정하여 사전을 재구성합니다. 이 같은

전화를 :

filtered_records = filter_unique(records, ['col1','col2','col3']) 

면책 조항 : 나는 그래서 내 솔루션은 최고의 또는 대부분을 최적화되지 않을 수도 있습니다, 파이썬 자신을 초보자입니다.

+0

정말 좋은 솔루션 :) 많은 수의 요소에 대해 느리게 작업하지만 필자는 필자의 요구 사항에 따라 조금씩 변형 할 수있었습니다. 좋은 :) – SiMemon

관련 문제