2013-07-11 101 views
1
periodsList = [] 
su = '0:' 
Su = [] 
sun = [] 
SUN = '' 

我通过转换Python函数返回错误值

extendedPeriods = ['0: 1200 - 1500', 
    '0: 1800 - 2330', 
    '2: 1200 - 1500', 
    '2: 1800 - 2330', 
    '3: 1200 - 1500', 
    '3: 1800 - 2330', 
    '4: 1200 - 1500', 
    '4: 1800 - 2330', 
    '5: 1200 - 1500', 
    '5: 1800 - 2330', 
    '6: 1200 - 1500', 
    '6: 1800 - 2330'] 

'1200 - 1500/1800 - 2330'

  • 苏在格式化时间表是一天标识
  • 苏,阳光店的一些值
  • SUN存储转换时间表

    for line in extendedPeriods: 
        if su in line:  
        Su.append(line) 
    
        for item in Su: 
        sun.append(item.replace(su, '', 1).strip()) 
    
        SUN = '/'.join([str(x) for x in sun]) 
    

然后我试着写为也套用我的 “转换器” 给其他日期的功能..

def formatPeriods(id, store1, store2, periodsDay): 
    for line in extendedPeriods: 
    if id in line:  
     store1.append(line) 

    for item in store1: 
    store2.append(item.replace(id, '', 1).strip()) 

    periodsDay = '/'.join([str(x) for x in store2]) 
    return periodsDay  

但该函数返回12个misformatted串...

'1200 - 1500', '1200 - 1500/1200 - 1500/1800 - 2330', 
+4

你应该给你的变量不同的名字,你一定会混淆他们与这些名字。 – Dahaka

+0

您提供的输入是为了获取这些格式错误的字符串而准确输入的? – Th3Cuber

+0

formatPeriods(su,Su,sun,SUN) – user2560609

回答

2

您可以使用collections.OrderedDict这里,如果订单没有按”牛逼事然后用collections.defaultdict

>>> from collections import OrderedDict 
>>> dic = OrderedDict() 
for item in extendedPeriods: 
    k,v = item.split(': ') 
    dic.setdefault(k,[]).append(v) 
...  
>>> for k,v in dic.iteritems(): 
...  print "/".join(v) 
...  
1200 - 1500/1800 - 2330 
1200 - 1500/1800 - 2330 
1200 - 1500/1800 - 2330 
1200 - 1500/1800 - 2330 
1200 - 1500/1800 - 2330 
1200 - 1500/1800 - 2330 

要访问某一天,你可以使用:

>>> print "/".join(dic['0']) #sunday 
1200 - 1500/1800 - 2330 
>>> print "/".join(dic['2']) #tuesday 
1200 - 1500/1800 - 2330 
1

这是您的一般逻辑:

from collections import defaultdict 

d = defaultdict(list) 

for i in extended_periods: 
    bits = i.split(':') 
    d[i[0].strip()].append(i[1].strip()) 

for i,v in d.iteritems(): 
    print i,'/'.join(v) 

输出是:

0 1200 - 1500/1800 - 2330 
3 1200 - 1500/1800 - 2330 
2 1200 - 1500/1800 - 2330 
5 1200 - 1500/1800 - 2330 
4 1200 - 1500/1800 - 2330 
6 1200 - 1500/1800 - 2330 

为了使功能一天,只需选择d[0](星期日为例):

def schedule_per_day(day): 

    d = defaultdict(list) 

    for i in extended_periods: 
     bits = i.split(':') 
     d[i[0].strip()].append(i[1].strip()) 

    return '/'.join(d[day]) if d.get(day) else None