2013-02-26 229 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