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

2024-09-29 23:16:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下Python代码。它接受datimetimedt,并检查它是否属于Type1Type2。如果没有触发这些类型,则返回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"]}

有什么简单的方法可以使代码更新最少


Tags: 代码inselfnonefordateifdt
2条回答

可以实现序列化功能:

def toJSON(self):
    return json.dumps(self, default=lambda o: o.__dict__, 
        sort_keys=True, indent=4)

您可以使用字典理解从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)]}

如果您的字典中必须有元组,那么您可以在dict comprehension中将列表转换为元组:

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))}

相关问题 更多 >

    热门问题