2017-08-09 1 views
0

Ich habe ein geordnetes Wörterbuch der Tage der Woche:Benötigen Sie Verständnis Verhalten von Ordereddict helfen

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

ich die n-te Schlüssel des Wert auf 1 zu ändern, so dass, wenn ich n auf 4 gesetzt, der vierte Schlüssel 'do' so Wochentag wird:

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

ich kann tun, dass mit dem folgenden 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] = 1 

das scheint zu funktionieren, aber wenn ich w Um die Werte zu ändern, die den Schlüsseln vor oder nach der n-ten Taste entsprechen, beginnt das Ordereddict, komisch zu wirken. Mit diesem 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) 

ich diese Ausgabe:

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

Wie erreiche ich das Ergebnis, das ich nach bin?

Antwort

1

Weil Sie lexikalischen Vergleich nicht numerische Reihenfolge tun, 'Tue' > 'Thurs':

Was Sie versuchen möchten, ist nur zu enumerate() die Tasten und verwenden Sie den numerischen Wert, z.B .:

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