2017-08-09 16 views
0

の振る舞いを理解する助けが必要です:は、私は曜日の順序付き辞書を持っているOrdereddict

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

私は4 nに設定した場合ので、4番目のキーは、1番目のキーの値を変更したいです私は次のコードでそれを行うことができ

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')]) 

は、どのように私は私が後だ結果を達成していますか?

答えて

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)]) 
関連する問題