Seite 1 von 1
Probleme mit Dictionary und Range
Verfasst: Donnerstag 1. Juni 2006, 16:25
von 7crystal7
Hallo Leute,
ich möchte mein Dictionary das so aussieht erweitern:
und zwar möchte ich für md für den Zeitraum von 2005-10-01 bis 2006-05-31 den Wert 11.1 zurückgeben, für 2006-06-01 bis 2006-12-31 den Wert 8.3.
Ich habs mal so probiert:
Code: Alles auswählen
dict = {"md": {[datetime(2005,10,1),datetime(2006,5,31)]:11.1,
[datetime(2006,6,1),datetime(2006,12,31)]:8.3},
"jh": 17.5}
Klappt aber irgendwie nicht, wisst ihr wie ich das realisieren kann?
Danke
Babsi
Edit (Leonidas): BBCode-Markup korrigiert.
Verfasst: Donnerstag 1. Juni 2006, 17:26
von helmut
Hallo,
ich wuerde es mit einer Funktion loesen:
Code: Alles auswählen
from datetime import datetime as dtime
def myfunc(datum):
if ((datum >= dtime(2005,10,1)) & (datum <= dtime(2006,5,31))):
return 11.1
elif ((datum >= dtime(2006,6,1)) & (datum <= dtime(2006,12,31))):
return 8.3
else:
return None
dat1 = dtime(2006,7,5)
var = myfunc(dat1)
Gruss, Helmut
Re: Probleme mit Dictionary und Range
Verfasst: Donnerstag 1. Juni 2006, 17:43
von Leonidas
7crystal7 hat geschrieben:Ich habs mal so probiert:
Code: Alles auswählen
dict = {"md": {[datetime(2005,10,1),datetime(2006,5,31)]:11.1,
[datetime(2006,6,1),datetime(2006,12,31)]:8.3},
"jh": 17.5}
Klappt aber irgendwie nicht, wisst ihr wie ich das realisieren kann?
Um mal von deinem Code auszugehen:
Code: Alles auswählen
#!/usr/bin/env python
# -*- encoding: latin-1 -*-
from datetime import datetime
d = {"md": {
(datetime(2005, 10, 1), datetime(2006, 5, 31)) :11.1,
(datetime(2006, 6, 1), datetime(2006, 12, 31)): 8.3,
},
"jh": 17.5
}
print d['md'][(datetime(2005, 10, 1), datetime(2006, 5, 31))]
Wie du siehst hab ich das dict nicht dict genannt (überschriebt sonst die Funktion dict), es anders eingerückt, paar Leerzeichen rein und die Listen (mutabel) zu Tupeln gemacht (immutabel).
Verfasst: Donnerstag 1. Juni 2006, 19:05
von 7crystal7
danke Euch!
Verfasst: Donnerstag 1. Juni 2006, 23:46
von BlackJack
helmut hat geschrieben:Code: Alles auswählen
from datetime import datetime as dtime
def myfunc(datum):
if ((datum >= dtime(2005,10,1)) & (datum <= dtime(2006,5,31))):
return 11.1
Das ``&`` ist eine Bit-Verknüpfung. Das klappt hier zufällig weil auf beiden Seiten ein Wahrheitswert steht, der als Zahl 0 bzw. 1 interpretiert werden kann, aber man sollte doch besser ``and`` schreiben wenn man logische Verknüfungen meint. In diesem Fall könnte man aber auch einfach das `datum` in die Mitte schreiben:
Code: Alles auswählen
if dtime(2006,5,31) >= datum >= dtime(2005,10,1):
return 11.1