Python-JSON/Dict搜索和值更新

2024-06-29 00:23:15 发布

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

我有一组数据项,如下所示:

{'formType': 'tax', 'periodEndDate': '2016-03-31', 'periodStartDate': 'NULL', 'fiscalYearEnd': 2016, 'label': 'FY2016'}
{'formType': 'tax', 'periodEndDate': '2015-03-31', 'periodStartDate': 'NULL', 'fiscalYearEnd': 2015, 'label': 'FY2015'}
{'formType': 'tax', 'periodEndDate': '2014-03-31', 'periodStartDate': 'NULL', 'fiscalYearEnd': 2014, 'label': 'FY2014'}
{'formType': 'amend', 'periodEndDate': '2015-06-30', 'periodStartDate': 'NULL', 'fiscalYearEnd': 'NULL', 'label': 'NULL'}
{'formType': 'amend', 'periodEndDate': '2015-09-30', 'periodStartDate': 'NULL', 'fiscalYearEnd': 'NULL', 'label': 'NULL'}
{'formType': 'amend', 'periodEndDate': '2014-06-30', 'periodStartDate': 'NULL', 'fiscalYearEnd': 'NULL', 'label': 'NULL'}
{'formType': 'amend', 'periodEndDate': '2014-09-30', 'periodStartDate': 'NULL', 'fiscalYearEnd': 'NULL', 'label': 'NULL'}

我想搜索此数据,并将“periodStartDate”值设置为“periodStartDate”的上一个期间条目(具有相同的formType)后一天的日期。我可以自如地使用datetime和日期添加等,但我不知道如何交叉引用此文件中的不同行项目来推断periodStartDate。你知道吗

此外,“formType”:“amend”需要基于使用从上述“formType”:“tax”键值对中楔入的年份来设置其“fiscalYearEnd”值。你知道吗


Tags: 数据datetime条目nulllabeltax数据项amend
1条回答
网友
1楼 · 发布于 2024-06-29 00:23:15

我会将每一行导入到一个list of dicts中,然后使用datetime.timedelta迭代该列表以获得您想要的结果

我将您提供的dict转换为一个列表来模拟我的示例。你知道吗

import datetime

list_of_dicts =[
                {'formType': 'tax', 'periodEndDate': '2016-03-31', 'periodStartDate': 'NULL', 'fiscalYearEnd': 2016, 'label': 'FY2016'},
                {'formType': 'tax', 'periodEndDate': '2015-03-31', 'periodStartDate': 'NULL', 'fiscalYearEnd': 2015, 'label': 'FY2015'},
                {'formType': 'tax', 'periodEndDate': '2014-03-31', 'periodStartDate': 'NULL', 'fiscalYearEnd': 2014, 'label': 'FY2014'},
                {'formType': 'amend', 'periodEndDate': '2015-06-30', 'periodStartDate': 'NULL', 'fiscalYearEnd': 'NULL', 'label': 'NULL'},
                {'formType': 'amend', 'periodEndDate': '2015-09-30', 'periodStartDate': 'NULL', 'fiscalYearEnd': 'NULL', 'label': 'NULL'},
                {'formType': 'amend', 'periodEndDate': '2014-06-30', 'periodStartDate': 'NULL', 'fiscalYearEnd': 'NULL', 'label': 'NULL'},
                {'formType': 'amend', 'periodEndDate': '2014-09-30', 'periodStartDate': 'NULL', 'fiscalYearEnd': 'NULL', 'label': 'NULL'}
                ]

def searchForYear(year):
    for subdict in list_of_dicts:
        if str(year) == 'NULL':
            print ("Year is NULL")
        elif str(year) == str(subdict['fiscalYearEnd']):
            if input('Do you want update this row? ') == 'yes':
                EndDate = datetime.datetime.strptime((subdict['periodEndDate']),"%Y-%m-%d").date()
                StartDate = EndDate + datetime.timedelta(days=1)
                subdict['periodStartDate'] = StartDate
                print ("StartDate is now ",subdict['periodStartDate'])
            else:
                print ("Did not update")

        else:
            print ("Year does not appear in this row")


submitYear = input("Check and update Year: ")
searchForYear(submitYear)

结果应该是:

Check and update Year: 2016
Do you want update this row? yes
StartDate is now  2016-04-01
Year does not appear in this row
Year does not appear in this row
Year does not appear in this row
Year does not appear in this row
Year does not appear in this row
Year does not appear in this row

相关问题 更多 >