2017-10-25 3 views
0

を使用してPythonのリストを反復: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リストに重複のトンがあります。個人の名前ごとにコードのブロックを作成せずに、person2014_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に掘り下げて答えを見つけました。これは私に2つの列のリストを与えます。最初の列の人の名前、次にその人が2番目の列にあるエントリの数。

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)