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

1

Из запроса 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":

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

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

Теги:
list
dictionary

4 ответа

2
Лучший ответ

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

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

Затем вам нужно обработать timedeltas, как вы хотите.

  • 0
    Спасибо за быстрый и точный ответ!
0

Итак, у каждого индекса есть n-кортеж timedeltas справа? Предполагая, из кода, что потенциально может быть более одного timedelta для каждого индекса. 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
0
deltas = [str(d[i][0]) for i, j in enumerate(m) if j == 4]

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

0

Вы просите

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 ]

?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню