我在Python中有以下代码。它需要一个datimetime dt
并检查它是否属于Type1
或Type2
。如果没有触发这些类型,则返回None
:
self.daytypes = {
'Type1': (
date(2015, 3, 12),
date(2015, 4, 8)
),
'Type2': (
date(2015, 1, 4),
date(2015, 3, 9),
date(2015, 5, 25)
)
}
def getDayType(self,dt):
holidays = []
for d in self.daytypes:
holidays.extend(self.daytypes[d])
wd = dt.isoweekday()
daytype = None
for t, ranges in self.daytypes.items():
for day in ranges:
if (day == dt.date()):
daytype = t
break
if daytype is not None:
break
return daytype
现在我想用Json字符串self.daytypes
替换数据结构myJson
:
{"Type1":["2015-03-12","2015-04-08"],"Type2":["2015-01-04","2015-03-09","2015-05-25"]}
有没有简单的方法可以用最少的代码更新来实现它?
答案 0 :(得分:1)
您可以使用字典理解从JSON字符串构建数据结构,如下所示:
import json
from datetime import datetime
json_string = '''{"Type1":["2015-03-12","2015-04-08"],"Type2":["2015-01-04","2015-03-09","2015-05-25"]}'''
daytypes = {k: [datetime.strptime(x, '%Y-%m-%d').date() for x in v] for k,v in json.loads(json_string).items()}
>>> daytypes
{'Type1': [datetime.date(2015, 3, 12), datetime.date(2015, 4, 8)], 'Type2': [datetime.date(2015, 1, 4), datetime.date(2015, 3, 9), datetime.date(2015, 5, 25)]}
如果您的字典中必须有元组,那么您可以将列表转换为字典理解中的元组:
daytypes = {k: tuple(datetime.strptime(x, '%Y-%m-%d').date() for x in v) for k,v in json.loads(json_string).items()}
>>> daytypes
{u'Type1': (datetime.date(2015, 3, 12), datetime.date(2015, 4, 8)), u'Type2': (datetime.date(2015, 1, 4), datetime.date(2015, 3, 9), datetime.date(2015, 5, 25))}
答案 1 :(得分:0)
您可以实现序列化功能:
def toJSON(self):
return json.dumps(self, default=lambda o: o.__dict__,
sort_keys=True, indent=4)