如何将一个元素与python子列表中的每个第一个元素进行比较?

我的团队成员给我传递了一个字典,该字典在特定的日期和时间存储菜单数据,如下所示:

    storeMenu = {}
    # menu[id] MenuName,storeID,[days],[time available],[meals available]
    storeMenu[1] = ['Mon Tues Special',1,[0,1],[[time(9,0),time(10,59)]],[1,2]]
    storeMenu[2] = ['Thurs Fri Menu',[3,4],[5,4]]
    storeMenu[3] = ['Wednesday Menu',[2],time(11,00)],[time(14,00),time(19,00)]],2]]
    storeMenu[4] = ['Wednesday Lunch Menu',[[time(11,time(14,2,4]]

    storeMenu[5] = ['Breakfeast Menu',3,[6,7,8]]
    storeMenu[6] = ['Lunch and Dinner Menu',time(20,[9]]

如果我选择的时间在开始时间和结束时间之间,我想返回菜单[x]。我已经编写了一个函数来检索它的开始时间,结束时间和一个要检查的函数。

    def getStartTime(storeMenu):
        menu = []

        for x in storeMenu:
            if(len(storeMenu[x][3]) == 1):
                result = [x,storeMenu[x][3][0][0]]
                menu.append(result)
            elif(len(storeMenu[x][3]) > 1):
                result1 = [x,storeMenu[x][3][0][0]]
                result2 = [x,storeMenu[x][3][1][0]]
                result = result1+result2
                menu.append(result)  

        return menu

    print(getStartTime(storeMenuFile))

    def getEndTime(storeMenu):
        menu = []
        for x in storeMenu:
            if(len(storeMenu[x][3]) == 1):
                result = [x,storeMenu[x][3][0][1]]
                menu.append(result)
            elif(len(storeMenu[x][3]) > 1):
                result1 = [x,storeMenu[x][3][0][1]]
                result2 = [x,storeMenu[x][3][1][1]]
                result = result1+result2
                menu.append(result)
        return menu

    print(getEndTime(storeMenuFile))


    def menuAtSelectedTime(storeMenu,sTime,selTime,eTime):
        menu = []

        for menuID in storeMenu:
            if(menuID == sTime[menuID-1][0] & menuID == eTime[menuID-1][0]):
                startTime = sTime[menuID-1][1]
                endTime = eTime[menuID-1][1]
                if(startTime < selTime < endTime):
                    result = [menuID,storeMenu[menuID]]
                    menu.append(result)
        return menu

    sTime = getStartTime(storeMenuFile)
    eTime = getEndTime(storeMenuFile)
    selTime = time(15,00)
    print(menuAtSelectedTime(storeMenuFile,eTime))

但是,它仅打印菜单[6],而不打印菜单[3]。我相信我的if陈述中有问题,但我似乎无法弄清楚。任何帮助,将不胜感激。谢谢!

jhcwengbin 回答:如何将一个元素与python子列表中的每个第一个元素进行比较?

您可以使用列表解释来快速遍历列表并返回与查询匹配的所有项目。列表解释的工作方式是[[if if(boolean statement)表示(list)中(values)的(返回项)]。在这种情况下,我将返回所有具有匹配条件的索引。

inds = [i for i,(MenuName,storeID,days,times,mealsavail) in enumerate(menu) if any([tstart>cond and tend<cond for tstart,tend in times])]

最后,使用另一种列表解释返回这些索引处的所有菜单。

[menu[i] for i in inds]
本文链接:https://www.f2er.com/3143274.html

大家都在问