【问题标题】:Need help understanding behaviour of Ordereddict需要帮助了解 Ordereddict 的行为
【发布时间】:2017-08-09 19:40:58
【问题描述】:

我有一本有序的星期几的字典:

weekdays = collections.OrderedDict([ ('Mon', 0), ('Tue', 0), ('Wed', 0), ('Thu', 0), ('Fri', 0), ('Sat', 0), ('Sun', 0) ])

我想将第 n 个键的值更改为 1,所以如果我将 n 设置为 4,则第 4 个键是“星期四”,因此工作日变为:

OrderedDict([('Mon', 0), ('Tue', 0), ('Wed', 0), ('Thu', 1), ('Fri', 0), ('Sat', 0), ('Sun', 0)])

我可以用下面的代码做到这一点:

startday_2017 = 4
weekdays = collections.OrderedDict([ ('Mon', 0), ('Tue', 0), ('Wed', 0), ('Thu', 0), ('Fri', 0), ('Sat', 0), ('Sun', 0) ])
date = list(weekdays.keys())[(startday_2017-1)]
for key in weekdays.keys():
        if key == date:
            weekdays[key] = 1

这似乎可行,但是如果我想更改与第 n 个键之前或之后的键对应的值,ordereddict 就会开始表现得很有趣。使用此代码:

startday_2017 = 4
weekdays = collections.OrderedDict([ ('Mon', 0), ('Tue', 0), ('Wed', 0), ('Thu', 0), ('Fri', 0), ('Sat', 0), ('Sun', 0) ])
date = list(weekdays.keys())[(startday_2017-1)]
for key in weekdays.keys():
        if key < date:
            weekdays[key] = "applesauce"
        elif key == date:
            weekdays[key] = 1
        else:
            weekdays[key] = 2

print(weekdays)

我得到这个输出:

OrderedDict([('Mon', 'applesauce'), ('Tue', 2), ('Wed', 2), ('Thu', 1), ('Fri', 'applesauce'), ('Sat', 'applesauce'), ('Sun', 'applesauce')])

如何达到我想要的结果?

【问题讨论】:

    标签: python-3.x ordereddictionary


    【解决方案1】:

    因为你是在做词法比较而不是数字排序,'Tue' &gt; 'Thurs':

    您可能想尝试的只是enumerate() 键并使用数值,例如:

    In []:
    for i, key in enumerate(weekdays, 1):
        if i < startday_2017:
            weekdays[key] = "applesauce"
        elif i == startday_2017:
            weekdays[key] = 1
        else:
            weekdays[key] = 2
    weekdays
    
    Out[]:
    OrderedDict([('Mon', 'applesauce'),
                 ('Tue', 'applesauce'),
                 ('Wed', 'applesauce'),
                 ('Thu', 1),
                 ('Fri', 2),
                 ('Sat', 2),
                 ('Sun', 2)])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-02
      • 2017-06-19
      • 2016-05-03
      • 1970-01-01
      • 2021-01-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多