2017-08-09 145 views
0

的理解行为我有星期几的有序词典:需要帮助Ordereddict

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 

,似乎工作,但如果I W蚂蚁在第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')]) 

如何实现结果我之后?

回答

1

因为你正在做的词汇比较没有的数字顺序,'Tue' > '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)])