如何用JSON字符串替换给定的数据结构



我在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)

最新更新