2009-03-17 4 views
1

Depuis MySQL requête que je reçois des données que je mettais dans un dictionnaire "d":Python - Acquérir la valeur du dictionnaire en fonction de l'emplacement/index dans la 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),)}

je une liste "m" avec des chiffres comme:

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

Je voudrais tester "m" et s'il y a nombre "4", j'aimerais recevoir une autre liste "h" avec des heures de "d" où l'index de la liste "m" correspondrait avec les clés du dictionnaire "d", donc: m [1], m [3] , m [5] me donnerait des heures assignées à d [1], d [3], d [5] dans la liste "h":

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

Je vous remercie de votre contribution pour que ...

Répondre

2

Je ne suis pas tout à fait sûr que ce soit ce que vous cherchez, mais je vais prendre une photo:

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

Ensuite, vous devez traiter les timedeltas que vous voulez.

+0

Merci pour une réponse rapide et acuarate! – elfuego1

-1

Demandez-vous

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] 

produit une liste de représentations delta sous forme de chaînes.

0

Donc, à chaque index est un n-uplet de timedeltas droite? En supposant, à partir du code, que potentiellement il pourrait y avoir plus d'un timedelta à chaque index. importer 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 
Questions connexes