2017-06-13 17 views
1

私は実際にGoogle Chart APIとFlaskで作業します。私は自分のデータベースからデータを取得した後、リストに追加します。2つの要素のリストの意味

マイリスト:私は例えば'Football'の平均を取得したい

[['Swimming', 4], ['Football', 4], ['Football', 2]], [['Swimming', 2] 

はそう['Football', 3]を持っています。 'Swimming'についても同様です。したがって、予想される出力は次のようになります。

[['Swimming', 4], ['Football', 3]] 

どうすればいいですか?

コード:

def get_quotation_by_activity(self, id_child): 
    cursor = self.link.cursor() 
    try: 
     cursor.execute("SELECT previous_activity, quotation FROM sessions, sessions_questions_asked WHERE sessions.id = sessions_questions_asked.id_session AND child=%s;", [id_child]); 
     quotation_activity = [] 
     quotation_activity_mean = [] 
     for row in cursor: 
      quotation_activity.append([row[0], row[1]]) 
    except (Exception, psycopg2.DatabaseError) as error: 
     print(error) 
     return [] 

    print(quotation_activity) 

    #Some tests.. 
    '''for i in quotation_activity: 
     activity = i[0] 
     quotation = i[1] 

     if not i in quotation_activity_mean: 
      quotation_activity_mean.append(i)''' 

    print(quotation_activity_mean) 

    return quotation_activity 

@app.route("/statistics") 
def stats(): 
    quotation_activity = db.get_quotation_by_activity(6) 
    return render_template('statistics.html', quotation_activity= quotation_activity) 
+0

どのように水泳の平均は4' 'することができますか?それはタイプミスですか? – MSeifert

答えて

2

あなたが使用することができます一時変数としてdict:

values = [['Swimming', 4], ['Football', 4], ['Football', 2], ['Swimming', 2]] 

result = {} 
for activity, quotation in values: 
    if activity in result: 
     result[activity].append(quotation) 
    else: 
     result[activity] = [quotation] 

final_result = [[name, sum(quotations)/len(quotations)] for name, quotations in result.items()] 

print(final_result) 

戻り値:

[['Swimming', 3.0], ['Football', 3.0]] 
+0

OK、実際には@MSeifertの回答がおそらく私よりも優れています – Antwane

2

あなたは一つの「種類」に関連した値を収集して、リストの内包で平均を計算するためにdefaultdictを使用することができます。しかしdefaultdictは順不同であるため、最終的なリストの要素の順序は未定義です:

from collections import defaultdict 

inp = [['Swimming', 4], ['Football', 4], ['Football', 2], ['Swimming', 2]] 

dct = defaultdict(list) 
for item in inp: 
    name, value = item 
    dct[name].append(value) 

print([[name, sum(values)/len(values)] for name, values in dct.items()]) 
# [['Swimming', 3.0], ['Football', 3.0]] 
1

あなたはdefaultdictを使用することができます。

a = [['Swimming', 4], ['Football', 4], ['Football', 2], ['Swimming', 2]] 
from collections import defaultdict 
d = defaultdict(lambda :0) 
d_count = defaultdict(lambda :0) 
for i in a: 
    d[i[0]] +=i[1] 
    d_count[i[0]] +=1 

d_resultat = {} 
for k,v in d.items(): 
    d_resultat[k] = v/d_count[k] 

d_resultat 

出力:

{'Football': 3.0, 'Swimming': 3.0} 
0
import numpy as np 

#initialize list 
your_list = [['Swimming', 4], ['Football', 4], ['Football', 2]], [['Swimming', 2]] 

#initialize dict 
temp_dict = {} 
for items in your_list: 
    for item in items: 
     temp_dict.update({item[0]:[]}) 

#put values into dict 
for items in your_list: 
    for item in items: 
     temp_list = temp_dict[item[0]] 
     temp_list.append(item[1]) 
     temp_dict[item[0]] = temp_list 

#generate new list 
new_list = [] 
for key in temp_dict: 
    new_list.append((key, int(np.average(temp_dict[key])))) 
関連する問題