Python函数返回错误的值

时间:2013-07-11 10:11:55

标签: python

periodsList = [] 
su = '0:'
Su = []
sun = []
SUN = ''

我正在转换时间表

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'

  • su是日标识符
  • Su,sun存储一些值
  • 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个格式错误的字符串......

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

2 个答案:

答案 0 :(得分: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 :(得分: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