2013-02-26 174 views
0

我是一個新手,所以如果我忽略了一些基本的東西,請耐心等待,但我正在嘗試爲我的朋友的瑜伽工作室列出瑜伽課程,該概念上應該看起來像這個:創建嵌套列表的問題

Monday 

Dynamic Yoga with Mary 6pm 

Soft yoga with Susie 8pm 

Wednesday 

Hatha yoga with Bob 5pm 

Hot yoga with Alice 7pm 

所以我想取得班的名單,然後看看週一是否有瑜伽課。如果有的話,我會在星期一和星期一的所有課程中添加「星期一」,以此類推。

問題:

到目前爲止我的代碼追加全部那裏有瑜伽班的日子,但隨後將所有從整週的班每天,當他們應該只添加對應於每個類天。

I.e.當它應該是:

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

它來代替:

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

這是我的代碼(這是對谷歌應用程序引擎,它可以在代碼解釋一些怪異...):

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) 
+2

這可以寫得更簡潔,但不應該'day_classes.append(class_output)'有更多級別的縮進嗎? – 2013-02-26 23:07:44

+0

@StevenRumbalski謝謝!沒有完全解決整個問題,但刪除了一些多餘的列表條目。小心給我提示如何使它更簡潔。這是我自己做的第一個獨立項目,因爲我做了Udacity的在線課程CS253,所以我很高興指出我應該朝哪個方向發展:) – 2013-02-26 23:15:05

+0

@StevenRumbalski實際上,那個縮進解決了所有問題,除了一個煩人事情。我的數據庫表格現在由星期一至星期四的瑜伽課程組成。然而,該列表在最後輸出['Thursday',[]],['Thursday',[]],['Thursday',[]]]。我想因爲範圍(1,8)使其追加,直到迭代完成。如果當天沒有課程,我怎麼能使它不會被追加? – 2013-02-26 23:34:34

回答

2

下面是一些pythonic代碼,利用itertools。數據按照groupby()的要求排序,然後分組。我發現任何使用範圍函數都表示你正在做的事情比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()) 
+0

CaptainMurphy:哇! :)我沒有注意到今天直到今天。感謝您付出這麼多努力來回答這個問題。我不得不承認,我並不完全理解這一點,但我認爲這正是我的「邊緣」所在,因此,理解這一點對我來說是一個很好的挑戰。週末愉快! – 2013-03-09 22:57:01

+0

不客氣。 :d – engineerC 2013-03-11 18:01:18