0

私は初心者なので、基本的なことを見落としている場合はご容赦ください。しかし、私の友人のヨガスタジオのヨガクラスを一覧表示するサイトを作成しようとしています。これは、概念的には次のようになります。

Monday

Dynamic Yoga with Mary 6pm

Soft yoga with Susie 8pm

Wednesday

Hatha yoga with Bob 5pm

Hot yoga with Alice 7pm

それで、クラスのリストを取得して、月曜日にヨガのクラスがあるかどうかを確認したいと思います。ある場合は、「月曜日」をリストに追加し、すべての月曜日のクラスを追加します。他のすべての日も同様です。

問題:

これまでの私のコードは、ヨガのクラスがあるすべての日を追加しますが、その後、週全体から毎日までのすべてのクラスを追加します。これらのクラスは、毎日に対応するクラスのみを追加する必要があります。

つまり、いつあるべきか:

Monday_list = [Monday, [[Class1Monday],[Class2Monday]]

代わりに:

Monday_list [Monday, [[CLass1Monday],[CLass2Monday],[CLass1Tuesday],[CLass2Tuesday]]]

これは私のコードです(これはGoogle App Engineにあり、コードの奇妙な点を説明している可能性があります...):

def get_classes():
    weekly_classes = []
    d = {1: 'Monday', 
         2: 'Tuesday', 
         3: 'Wednesday', 
         4: 'Thursday', 
         5: 'Friday', 
         6: 'Saturday', 
         7: 'Sunday'}
    yoga_classes = Schema.all() #appengine DB request
    if yoga_classes:
         #list that will be sent to template
        for n in range(1,8):
            day_classes = []
            for e in yoga_classes:
                if e.weekday == n:
                    day = d[n]
                    class_output = [str(e.name),
                                    str(e.teacher),
                                    str(e.description)
                                    ]
                day_classes.append(class_output)
            day_output = [day,day_classes]
            weekly_classes.append(day_output)
        self.response.out.write(weekly_classes)
4

1 に答える 1

2

を活用した、さらに Pythonic コードを次に示しますitertools。データは、必要に応じて日別にソートされgroupby()、グループ化されます。range 関数の使用は、Python よりも C に近いことを行っていることを示しており、おそらくそれを行うよりクリーンな方法があることを発見しました。このコードの大部分は、動作するダミー データを設定しているだけであることに注意してください。

class Yoga():
    def __init__(self,weekday,name,teacher,description):
        self.weekday=weekday
        self.name=name
        self.teacher=teacher
        self.description=description
    def __str__(self):
        return "%s yoga with %s %s" % (self.name,self.teacher,self.description)
    def __repr__(self):
        return str(self)

# just make up some data to work with
yoga_classes = (Yoga(1,"dynamic","mary","6pm"),
                Yoga(1,"soft","susie","8pm"),
                Yoga(3,"hatha","bob","5pm"),
                Yoga(3,"hot","alice","7pm"))

daylookup = (None,"Monday","Tuesday","Wednesday",
            "Thursday","Friday","Saturday","Sunday")

import itertools
def get_classes():
    weekly_classes = []
    ycsorted = sorted(yoga_classes,key=lambda x: x.weekday)
    for k,g in itertools.groupby(ycsorted,key=lambda x: x.weekday):
        weekly_classes.append((daylookup[k],tuple(g)))
    return weekly_classes

import pprint
pprint.pprint(get_classes())
于 2013-02-27T01:59:17.930 に答える