2011-11-09 13 views
2

私が達成しようとしていることをうまく説明できます。私は結果を達成するのに何の問題もないが、これはおそらくこれを行う最良の方法ではないことが分かっている。Python/Django - 曜日と週の合計でリストを作成

私は日付によっていくつかのエントリのテーブルを持っています。私は今月からそれらのエントリを取って、週ごとにそれらをリストに配置して、その週の各曜日のテーブルから値を合計しようとしています。最終結果は次のようになります。

{44: {4: Decimal('2.80'), 5: Decimal('6.30')}, 45: {1: Decimal('8.90'), 2: Decimal('10.60')}} 

私は解決策があります。しかし、私はこれが最良の方法ではないことを知っています。どのようにこれをより良くするためのアイデアですか?

#Queries the database and returns time objects that have fields 'hours' and 'date' 
time = self.month_time() 

r = {} 
for t in time: 
    #Get the week of the year number 
    week = t.date.isocalendar()[1] 

    #Get the day of the week number 
    day = t.date.isoweekday() 

    if week not in r: 
     r.update({week:{}}) 
    if day not in r[week]: 
     r[week][day] = 0 

    r[week][day] = r[week][day] + t.hours 

答えて

1

あなたはおそらくdefaultdictを探していると思います。 A defaultdictは辞書と似ていますが、KeyErrorがdictでスローされる場合を除き、初期化時に与えられたファクトリ関数を使用して初期値を作成します。

あなたのケースでは、weeksの場合はdaysの場合はdefaultdictを入れてください。私はこれがあなたのために働くと思う:

from collections import defaultdict 

r = defaultdict(lambda: defaultdict(int)) 
for t in time: 
    week = t.date.isocalendar()[1] 
    day = t.date.isoweekday() 
    r[week][day] += t.hours 
+0

ありがとう。私はこれを試し、あなたに知らせるでしょう。 –