我在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字符串myJson
替换数据结构self.daytypes
:
{"Type1":["2015-03-12","2015-04-08"],"Type2":["2015-01-04","2015-03-09","2015-05-25"]}
有什么简单的方法可以使用代码的最小更新?
您可以使用词典理解从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))}
您可以实现序列化功能:
def toJSON(self):
return json.dumps(self, default=lambda o: o.__dict__,
sort_keys=True, indent=4)