Python для одного лайнера

У меня проблема.

Я хочу сделать свой код более простым и понятным.

Я пытаюсь получить значение следующей даты из данных x.

Вот мой код. Есть ли способ сделать его короче с помощью лямбда или карты?

def nextDay(date,x,time=1):
     res, c = None, 0

     while c<time:
          temp = iter(x)
          for key in temp:
               if key == date:
                    res = next(temp, None)
          date = res
          c+=1
     return res

x = {'2020-01-11': 3.4, '2020-01-13': 4.1, '2020-02-02': 4.1 }
print(x[nextDay('2020-01-11', x, time=1)])

Вывод:

4.1

2 ответа

Вместо того, чтобы проходить даты time раз и всегда только вперед на одну дату, просто найдите данную дату, а затем прочтите следующую time даты.

def nextDay(date, x, time=1):
    it = iter(x)
    date in it
    for _ in range(time):
        date = next(it, None)
    return date

Или с itertools.islice:

def nextDay(date, x, time=1):
    it = iter(x)
    date in it
    return next(islice(it, time - 1, None), None)

Я действительно не думаю, что вы можете сократить код, но вы можете немного реорганизовать его, чтобы сделать его более правильным

def nextDay(date, x, time=1):
     res = None
     for c in range(time):
          temp = iter(x)
          for key in temp:
               if key == date:
                    res = next(temp, None)
          date = res
     return res

На самом деле, максимум, что вы собираетесь сбрить, - это примерно 2 линии, если я не ошибаюсь.

Другие вопросы по тегам