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:

Code: Alles auswählen

dict = { "md":11.1,
            "jh":17.5}
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!
:D

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