Probleme mit Dictionary und Range

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
7crystal7
User
Beiträge: 46
Registriert: Freitag 26. Mai 2006, 18:50

Donnerstag 1. Juni 2006, 16:25

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.
helmut
User
Beiträge: 57
Registriert: Mittwoch 2. November 2005, 07:45
Wohnort: Dormagen

Donnerstag 1. Juni 2006, 17:26

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
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Donnerstag 1. Juni 2006, 17:43

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).
My god, it's full of CARs! | Leonidasvoice vs Modvoice
7crystal7
User
Beiträge: 46
Registriert: Freitag 26. Mai 2006, 18:50

Donnerstag 1. Juni 2006, 19:05

danke Euch!
:D
BlackJack

Donnerstag 1. Juni 2006, 23:46

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
Antworten