首页 > 解决方案 > Python:计算每周的交通选择

问题描述

我有两个 dicts 可以跟踪我每周使用的交通工具类型:

transportation = {
    'car':[1,0,0,0,0,0,1],
    'walk':[0,1,0,1,0,0,0],
    'bike':[0,1,1,0,1,0,0],
 }

grains = {
    'overall':['car','walk','bike'],
    'environmentally_friendly':['walk','bike'],
 }

我想汇总数据以计算过去一周使用交通工具的时间:

using_transportation = {
    'overall': 6,
    'environmentally_friendly': 4,
 }

如果一周是周日到周六,overall则为 6,因为我周五不使用交通工具。environmentally_friendly是 4,因为星期一我步行和骑自行车(仅计为 1),然后在星期二 - 星期四步行或骑自行车。

这是我用来计算整体的,但不知道如何打破环境友好(不幸的是不能使用熊猫):

week = []
day = []

i = 0
while i <= 6:
    for k,v in datelist.items():
        day.append(v[i])
    if 1 in day:
        week.append(True)
    else:
        week.append(False)
    day = []
    i+=1

print(sum(week))

任何关于更好方法的建议都非常感谢!

标签: python

解决方案


这是您可以解决问题的一种方法:

transportation = {                                                              
     'car':[1,0,0,0,0,0,1],                                                      
     'walk':[0,1,0,1,0,0,0],                                                     
     'bike':[0,1,1,0,1,0,0],                                                     
  }                                                                              
                                                                                 
 grains = {                                                                      
     'overall':['car','walk','bike'],                                            
     'environmentally_friendly':['walk','bike'],                                 
  }                                                                              
                                                                                 
 def save_the_planet(transportation, grains):                                    
     # Let't do the week plan (as a bonus)                                       
     def go(x, i): return [k for (k, v) in x.items() if v[i] == 1]               
     week = {                                                                    
             'monday':       go(transportation, 0),                              
             'tuesday':      go(transportation, 1),                              
             'wednesday':    go(transportation, 2),                              
             'thursday':     go(transportation, 3),                              
             'friday':       go(transportation, 4),                              
             'saturday':     go(transportation, 5),                              
             'sunday':       go(transportation, 6),                              
             }                                                                   
                                                                                 
     # Now lets calculate                                                        
     overall     = transportation.keys()                                         
     not_eco     = [x for x in overall if x not in grains['environmentally_friendly']]
     not_eco     = {k:v for k,v in week.items() if any([x in v for x in not_eco])}
     eco_week    = {k:v for k,v in week.items() if k not in not_eco.keys()}         
                                                                                   
     # Then le'ts reveal the answer                                              
     return {                                                                       
             'overall': len([x for x in week.values() if x]),                       
             'environmentally_friendly': len([x for x in eco_week.values() if x]),
             }                                                                      
                                                                                    
print(save_the_planet(transportation, grains))

您可能可以对其进行一些优化


推荐阅读