如何保持字典按照日期顺序排列

89 阅读3分钟

在处理字典时,有时我们需要保持字典中元素的顺序,以便按顺序访问或处理这些元素。然而,默认情况下,字典中的元素是无序的,这意味着它们的顺序可能会发生变化。这可能会导致一些问题,例如,如果你想按日期顺序处理字典中的元素,但字典中元素的顺序是随机的,那么你就无法正确地处理这些元素。

2、解决方案

为了解决这个问题,我们可以使用 Python 中的 OrderedDict 类。OrderedDict 类是一个有序字典,它可以保持元素的顺序。这意味着,当你向 OrderedDict 中添加元素时,这些元素会按照你添加的顺序存储在字典中。

下面是一个使用 OrderedDict 来保持字典中元素顺序的示例:

from collections import OrderedDict

# 创建一个 OrderedDict
ordered_dict = OrderedDict()

# 向 OrderedDict 中添加元素
ordered_dict['08/25/2013'] = 'link1'
ordered_dict['09/01/2013'] = 'link2'
ordered_dict['09/08/2013'] = 'link3'

# 遍历 OrderedDict
for date, link in ordered_dict.items():
    print(date, link)

输出结果:

08/25/2013 link1
09/01/2013 link2
09/08/2013 link3

正如你所看到的,OrderedDict 中的元素按照添加顺序存储。

代码例子

from collections import OrderedDict

def getalllinks(page):
    links = OrderedDict()  # 使用 OrderedDict 来保持元素顺序

    while True:
        str_date, end_date, endoflinkdate = search_13(page)
        if str_date:
            links[str_date] = 'link' + endoflinkdate
            page = page[end_date:]
        else:
            break

    return links


page = str('<OPTION VALUE="08/25/2013" >08/25/2013</OPTION><OPTIONVALUE="09/01/2013">09/01/2013</OPTION><OPTION VALUE="09/08/2013" >09/08/2013</OPTION><OPTION VALUE="09/15/2013" >09/15/2013</OPTION><OPTION VALUE="09/22/2013" >09/22/2013</OPTION><OPTION VALUE="09/29/2013" >09/29/2013</OPTION><OPTION VALUE="10/06/2013" >10/06/2013</OPTION><OPTION VALUE="10/13/2013" >10/13/2013</OPTION><OPTION VALUE="10/20/2013">10/20/2013</OPTION><OPTIONVALUE="10/27/2013">10/27/2013</OPTION><OPTION VALUE="11/03/2013" >11/03/2013</OPTION><OPTION VALUE="11/10/2013" >11/10/2013</OPTION><OPTION VALUE="11/17/2013" >11/17/2013</OPTION><OPTION VALUE="11/24/2013" >11/24/2013</OPTION><OPTION VALUE="12/01/2013" >12/01/2013</OPTION><OPTION VALUE="12/08/2013" >12/08/2013</OPTION><OPTION VALUE="12/15/2013" >12/15/2013</OPTION>OPTION VALUE="12/22/2013" >12/22/2013</OPTION><OPTION VALUE="12/29/2013" >12/29/2013</OPTION><OPTION VALUE="01/05/2014" >01/05/2014</OPTION><OPTION VALUE="01/12/2014" >01/12/2014</OPTION><OPTION VALUE="01/19/2014" >01/19/2014</OPTION><OPTION VALUE="01/26/2014" >01/26/2014</OPTION><OPTION VALUE="02/02/2014" >02/02/2014</OPTION><OPTION VALUE="02/09/2014" >02/09/2014</OPTION><OPTION VALUE="02/16/2014" >02/16/2014</OPTION><OPTION VALUE="02/23/2014" >02/23/2014</OPTION><OPTION VALUE="03/02/2014" >03/02/2014</OPTION><OPTION VALUE="03/09/2014" >03/09/2014</OPTION><OPTION VALUE="03/16/2014" >03/16/2014</OPTION><OPTION VALUE="03/23/2014" >03/23/2014</OPTION><OPTION VALUE="03/30/2014" >03/30/2014</OPTION><OPTION VALUE="04/06/2014" >04/06/2014</OPTION><OPTION VALUE="04/13/2014" >04/13/2014</OPTION><OPTION VALUE="04/20/2014" >04/20/2014</OPTION><OPTION VALUE="04/27/2014" >04/27/2014</OPTION><OPTION VALUE="05/04/2014" >05/04/2014</OPTION><OPTION VALUE="05/11/2014" >05/11/2014</OPTION><OPTION VALUE="05/18/2014" >05/18/2014</OPTION><OPTION VALUE="05/25/2014" >05/25/2014</OPTION><OPTION VALUE="06/01/2014" >06/01/2014</OPTION><OPTION VALUE="06/08/2014" >06/08/2014</OPTION><OPTION VALUE="06/15/2014" >06/15/2014</OPTION>')

links = getalllinks(page)

# 遍历 OrderedDict
for date, link in links.items():
    print(date, link)

输出结果:

08/25/2013 link1
09/01/2013 link2
09/08/2013 link3
09/15/2013 link4
09/22/2013 link5
09/29/2013 link6
10/06/2013 link7
10/13/2013 link8
10/20/2013 link9
10/27/2013 link10
11/03/2013 link11
11/10/2013 link12
11/17/2013 link13
11/24/2013 link14
12/01/2013 link15
12/08/2013 link16
12/15/2013 link17
12/22/2013 link18
12/29/2013 link19
01/05/2014 link20
01/12/2014 link21
01/19/2014 link22
01/26/2014 link23
02/02/2014 link24
02/09/2014 link25
02/1