更改词汇表中的值

2024-05-17 05:42:50 发布

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

我有大量的字典列表,我必须更改列表中每个字典的<DATE>键中的日期格式

我编写了这样的代码,但不起作用:

dict_list = [
    {'<TICKER>': 'HDR', '<DATE>': '19980317', '<CLOSE>': '11.633', '<VOL>': '67931'},
    {'<TICKER>': 'HDR', '<DATE>': '19980318', '<CLOSE>': '10.481', '<VOL>': '115169'},
    {'<TICKER>': 'HDR', '<DATE>': '19980319', '<CLOSE>': '10.131', '<VOL>': '75305'},
    {'<TICKER>': 'HDR', '<DATE>': '19980320', '<CLOSE>': '10.481', '<VOL>': '53504'},
    {'<TICKER>': 'HDR', '<DATE>': '19980323', '<CLOSE>': '10.379', '<VOL>': '27581'},
    {'<TICKER>': 'HDR', '<DATE>': '19980324', '<CLOSE>': '10.228', '<VOL>': '37328'},
    {'<TICKER>': 'HDR', '<DATE>': '19980325', '<CLOSE>': '10.131', '<VOL>': '28739'},
    {'<TICKER>': 'HDR', '<DATE>': '19980326', '<CLOSE>': '10.131', '<VOL>': '45352'},
    {'<TICKER>': 'HDR', '<DATE>': '19980327', '<CLOSE>': '10.027', '<VOL>': '42585'},
    {'<TICKER>': 'HDR', '<DATE>': '19980330', '<CLOSE>': '10.027', '<VOL>': '21260'}
]
    
for dictionary in dict_list:
    for date in dictionary:
        date = dictionary["<DATE>"]
        year = date[:4]
        month = date[4:6]
        day = date[6:]
        date = f"{year}-{month}-{day}"

print(dict_list)

我想补充:

dictionary.update({"<DATE>": date})

但产出看起来并不好。应该是:

{...'<DATE>': '1998-03-17'...}

是:

{...'<DATE>': '1998------0-3-17'...}

我不知道如何修理它。请帮忙


Tags: in列表forclosedatedictionary字典hdr
3条回答

您的第二个循环有问题,这使您的字典更新了4次。以下是我的解决方案:

dict_list = [{'<TICKER>': 'HDR', '<DATE>': '19980317', '<CLOSE>': '11.633', '<VOL>': '67931'}, {'<TICKER>': 'HDR', '<DATE>': '19980318', '<CLOSE>': '10.481', '<VOL>': '115169'}, {'<TICKER>': 'HDR', '<DATE>': '19980319', '<CLOSE>': '10.131', '<VOL>': '75305'}, {'<TICKER>': 'HDR', '<DATE>': '19980320', '<CLOSE>': '10.481', '<VOL>': '53504'}, {'<TICKER>': 'HDR', '<DATE>': '19980323', '<CLOSE>': '10.379', '<VOL>': '27581'}, {'<TICKER>': 'HDR', '<DATE>': '19980324', '<CLOSE>': '10.228', '<VOL>': '37328'}, {'<TICKER>': 'HDR', '<DATE>': '19980325', '<CLOSE>': '10.131', '<VOL>': '28739'}, {'<TICKER>': 'HDR', '<DATE>': '19980326', '<CLOSE>': '10.131', '<VOL>': '45352'}, {'<TICKER>': 'HDR', '<DATE>': '19980327', '<CLOSE>': '10.027', '<VOL>': '42585'}, {'<TICKER>': 'HDR', '<DATE>': '19980330', '<CLOSE>': '10.027', '<VOL>': '21260'}]
     
for dictionary in dict_list:
    date = dictionary["<DATE>"]
    year = date[:4]
    month = date[4:6]
    day = date[6:]
    date = f"{year}-{month}-{day}"

为什么需要再次循环dictionary

这一行:

    for date in dictionary:

该通道迭代字典的键。因此,内的逻辑重复地获取<DATE>字段的前四位数字,并对其进行切片,如下所示:

19980330        ==> 1998|03|30
1998-03-30      ==> 1998|-0|3-30
1998--0-3-30    ==> 1998|--|0-3-30
1998----0-3-30
  1. 移除第二个循环
  2. 还有,在那里调用.update()有什么意义?直接分配,就像这样:
    dictionary["<DATE>"] = date

哦,您必须设置一个条件来检查<DATE>键。只有这个加法才能得到预期的输出

您的输入列表

dict_list = [{'<TICKER>': 'HDR', '<DATE>': '19980317', '<CLOSE>': '11.633', '<VOL>': '67931'}, {'<TICKER>': 'HDR', '<DATE>': '19980318', '<CLOSE>': '10.481', '<VOL>': '115169'}, {'<TICKER>': 'HDR', '<DATE>': '19980319', '<CLOSE>': '10.131', '<VOL>': '75305'}, {'<TICKER>': 'HDR', '<DATE>': '19980320', '<CLOSE>': '10.481', '<VOL>': '53504'}, {'<TICKER>': 'HDR', '<DATE>': '19980323', '<CLOSE>': '10.379', '<VOL>': '27581'}, {'<TICKER>': 'HDR', '<DATE>': '19980324', '<CLOSE>': '10.228', '<VOL>': '37328'}, {'<TICKER>': 'HDR', '<DATE>': '19980325', '<CLOSE>': '10.131', '<VOL>': '28739'}, {'<TICKER>': 'HDR', '<DATE>': '19980326', '<CLOSE>': '10.131', '<VOL>': '45352'}, {'<TICKER>': 'HDR', '<DATE>': '19980327', '<CLOSE>': '10.027', '<VOL>': '42585'}, {'<TICKER>': 'HDR', '<DATE>': '19980330', '<CLOSE>': '10.027', '<VOL>': '21260'}]

修改代码

for dictionary in dict_list:
    for key in dictionary:
        if key == "<DATE>" :
            date = dictionary[key]
            year = date[:4]
            month = date[4:6]
            day = date[6:]
            date = f"{year}-{month}-{day}"
            dictionary[key] = date
        else:
            pass

print(dict_list)

您的预期产出

[{'<TICKER>': 'HDR', '<DATE>': '1998-03-17', '<CLOSE>': '11.633', '<VOL>': '67931'}, {'<TICKER>': 'HDR', '<DATE>': '1998-03-18', '<CLOSE>': '10.481', '<VOL>': '115169'}, {'<TICKER>': 'HDR', '<DATE>': '1998-03-19', '<CLOSE>': '10.131', '<VOL>': '75305'}, {'<TICKER>': 'HDR', '<DATE>': '1998-03-20', '<CLOSE>': '10.481', '<VOL>': '53504'}, {'<TICKER>': 'HDR', '<DATE>': '1998-03-23', '<CLOSE>': '10.379', '<VOL>': '27581'}, {'<TICKER>': 'HDR', '<DATE>': '1998-03-24', '<CLOSE>': '10.228', '<VOL>': '37328'}, {'<TICKER>': 'HDR', '<DATE>': '1998-03-25', '<CLOSE>': '10.131', '<VOL>': '28739'}, {'<TICKER>': 'HDR', '<DATE>': '1998-03-26', '<CLOSE>': '10.131', '<VOL>': '45352'}, {'<TICKER>': 'HDR', '<DATE>': '1998-03-27', '<CLOSE>': '10.027', '<VOL>': '42585'}, {'<TICKER>': 'HDR', '<DATE>': '1998-03-30', '<CLOSE>': '10.027', '<VOL>': '21260'}]

相关问题 更多 >