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.
7crystal7
User
Beiträge: 46
Registriert: Freitag 26. Mai 2006, 18:50

Probleme mit Dictionary und Range

Beitragvon 7crystal7 » 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

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

Re: Probleme mit Dictionary und Range

Beitragvon Leonidas » 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

Beitragvon 7crystal7 » Donnerstag 1. Juni 2006, 19:05

danke Euch!
:D
BlackJack

Beitragvon 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

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder