2017-10-25 3 views
0

다음 문제에 봉착했습니다.Python - 다른 목록을 사용하여 파이썬 목록을 반복합니다.

중복되는 데이터가 많은 목록이 있습니다. 여기에는 항목 번호와 이름이 포함됩니다. 지금은 사람들의 목록을 가지고

tablequery = c.execute("SELECT * FROM Data2014") 
    tablequery_results = list(people2014) 
    people2014_count = len(tablequery_results) 
    people2014_list = [] 
    for i in tablequery_results: 
     if i[1] not in people2014_list: 
      people2014_list.append(i[1]) 
    people2014_count = len(people2014_list) 
    # for i in people2014_list: 
    #  print(i) 

:

다음은 나에게 Data2014 테이블에서 사람들의 독특한 (비 중복) 이름의 목록을 제공합니다. 다시 한번 tablequery_results를 반복해야하지만, 이번에는 각 사람이 가지고있는 고유 한 엔트리 수를 찾아야합니다. tablequery_results 목록에 수 많은 중복이 있습니다. 각 개인의 이름에 대한 코드 블록을 작성하지 않고 people2014_list의 이름을 고유 식별자로 사용하여 tablequery_results를 반복하는 방법이 있습니까? 고유 항목 번호 목록을 제공하기 위해 위에서 코드를 복제 할 수 있지만 고유 항목 번호와 이름을 일치시킬 수 없습니다.

그것이 의미가 없는지 알려주세요.

미리 감사드립니다.

+2

SQL을 사용하여 그룹화 및 집계를 직접 수행하지 않는 이유는 무엇입니까? – alecxe

+0

내가 알고있는 유일한 방법은'c.execute ("SELECT * FROM Data2014"WHERE Name = 'John')'입니다. 이것은 여전히 ​​목록에있는 모든 사람에게 복제의 문제를 남겨 둡니다. 맞습니까? 아시다시피 SQL에 익숙하지 않아서 틀렸어. – grigs

+1

'people2014_list'에 대한 목록 대신 [set] (https://docs.python.org/2/library/stdtypes.html#set-types-set-frozenset)을 사용했다면 중복을 포함하지 않을 것입니다 . 이전에 제안 된 것처럼, SQL DISTINCT 또는 GROUP BY 문을 사용하는 것이 더 좋은 방법 일 수 있습니다. – rkersh

답변

0

SQL로 더 자세히 살펴본 후 제 대답을 발견했습니다. 이것은 나에게 두 개의 열이있는 목록을 제공합니다. 첫 번째 열에있는 사람의 이름과 그 사람이 두 번째 열에있는 항목의 수.

def people_data(): 
    data_fetch = c.execute("SELECT person, COUNT(*) AS `NUM` FROM Data2014 WHERE ACTION='UPDATED' GROUP BY Person ORDER BY NUM DESC") 
    people_field_results = list(data_fetch) 
    people_field_results_count = len(people_field_results) 
    for i in people_field_results: 
     print(i) 
    print(people_field_results_count) 
관련 문제