2017-08-09 7 views
0

J'ai un dictionnaire ordonné de jours de la semaine: si je mets n à 4Besoin d'aide pour comprendre le comportement des Ordereddict

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

Je souhaite modifier la nième valeur de clé 1, la clé 4 est 'Jeu' si la semaine devient:

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

je peux le faire avec le code suivant:

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 

cela semble fonctionner, mais si je w ant pour changer les valeurs correspondant aux touches avant ou après la nième touche, l'ordereddict commence à agir de manière amusante. Avec ce code:

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) 

Je reçois cette sortie:

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

Comment puis-je obtenir le résultat que je suis après?

Répondre

1

Parce que vous faites la comparaison lexicale ne commande numérique, 'Tue' > 'Thurs':

Ce que vous pourriez vouloir essayer est juste enumerate() les touches et utiliser la valeur numérique, par exemple .:

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