Python - получить значение из словаря в зависимости от местоположения / индекса в списке - PullRequest
1 голос
/ 17 марта 2009

Из запроса MySQL я получаю данные, которые помещаю в словарь "d":

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" с такими номерами, как:

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

Я хотел бы проверить «m», и если есть число «4», я хотел бы получить другой список «h» с часами от «d», где индекс из списка «m» будет соответствовать ключам из словаря "d", поэтому: m [1], m [3], m [5] дадут мне часы, назначенные для d [1], d [3], d [5] в списке "h":

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

Буду признателен за ваш вклад в это ...

Ответы [ 4 ]

2 голосов
/ 17 марта 2009

Я не совсем уверен, что это то, что вы ищете, но я сделаю снимок:

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

Тогда вы должны обрабатывать timedeltas так, как хотите.

0 голосов
/ 11 июля 2010

Так что в каждом индексе есть n-кортеж timedeltas верно? Предполагая из кода, что потенциально может быть более одного timedelta в каждом индексе. дата импорта время

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
0 голосов
/ 17 марта 2009
deltas = [str(d[i][0]) for i, j in enumerate(m) if j == 4]

создает список дельта-представления в виде строк.

0 голосов
/ 17 марта 2009

Вы спрашиваете

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 ]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...