2009-03-17 2 views
1

Von MySQL-Abfrage-I-Daten erhalten, die ich in einen Wörterbuch "d" setzen:Python - Erwerb Wert von Wörterbuch je nach Standort/Index in der Liste

d = {0: (datetime.timedelta (0, 25200),), 1: (datetime.timedelta (0, 25500),), 2: (datetime.timedelta (0, 25800),), 3: (datetime.timedelta (0, 26100),) , 4: (datetime.timedelta (0, 26400)), 5: (datetime.timedelta (0, 26700))}

ich habe eine Liste "m" mit Zahlen wie:

m = [3, 4, 1, 4, 7, 4]

Ich mag "m" testen und wenn es Nummer "4", ich möchte eine andere Liste "h" mit Stunden von "d" erhalten, wobei der Index von der Liste "m" mit den Schlüsseln aus dem Wörterbuch "d" korrespondieren würde, also: m [1], m [3] , m [5] würde mir Stunden zugewiesen bekommen d [1], d [3], d [5] in Liste "h":

h = [7:05:00, 7:15: 00, 7:25:00]

Ich werde Ihre Eingabe für das schätzen ...

Antwort

2

Ich bin nicht ganz sicher, ob dies ist, was Sie suchen, aber ich werde einen Schuss nehmen:

>>> indices = [index for index, i in enumerate(m) if i == 4] 
>>> h = [d[i][0] for i in indices] 

Dann müssen Sie die timedeltas verarbeiten, wie Sie wollen.

+0

Vielen Dank für schnelle und korrekte Antwort! – elfuego1

-1

Sind Sie fragen für

def hms(td): 
    h = dt.seconds // 3600 
    m = dt.seconds%3600 // 60 
    s = dt.seconds%60 
    return h+td.days*24, m, s 


[ hms(d[ m[i] ]) for i in m ] 

?

0
deltas = [str(d[i][0]) for i, j in enumerate(m) if j == 4] 

erzeugt eine Liste der Delta-Darstellung als Strings.

0

Also bei jedem Index ist ein n-Tupel von timedeltas richtig? Angenommen, aus dem Code könnte potenziell mehr als ein timedelta bei jedem Index sein. import datetime

import datetime 

d = {0: (datetime.timedelta(0, 25200),), 1: (datetime.timedelta(0, 25500),), 2: (datetime.timedelta(0, 25800),), 3: (datetime.timedelta(0, 26100),), 4: (datetime.timedelta(0, 26400),), 5: (datetime.timedelta(0, 26700),)} 
m = [3, 4, 1, 4, 7, 4] 

def something(m, d): 
    h = {} 
    for index in m: 
    if index in d and index not in h: 
     for dt in d[index]: 
     total = sum([dt.seconds for dt in d[index]]) 
     hours = total/3600 
     minutes = (total - (3600 * hours))/60 
     seconds = (total - (3600 * hours) - (60 * minutes)) 
     h[index] = "%d:%02d:%02d" % (hours, minutes, seconds) 
    return h.values() 

print something(m, d) # returns exactly what you asked for 
Verwandte Themen