Использование словаря для изменения аргументов переменной - PullRequest
0 голосов
/ 26 февраля 2019

Я пытаюсь использовать словарь для изменения значения, вставляемого в аргументы функции.

horizon = 'YEARS'

Dict1 = {'YEARS':'weeks = 52*x','WEEKS':'weeks = x','DAYS':'days = x','HOURS': 'hours = x'} 

dummy = pd.to_datetime(pd.datetime.now())

dummy2 = [dummy - timedelta(weeks=x) for x in range(1,5)]

dummy3 = [dummy - timedelta((Dict1[horizon])) for x in range(1,5)]

В этом случае переменная dummy2 работает, но переменная dummy3 победилаDict1[horizon][0] даст строку.

Могу ли я реализовать это любым другим способом?

1 Ответ

0 голосов
/ 26 февраля 2019

Да, вы можете, используя распаковку словаря и лямбда-функцию.

Dict1 = {'YEARS': lambda a: {'weeks': 52 * a}, ...

... timedelta(**Dict1[horizon](x)) ... 

Как это работает?

Ну, сначала Dict1['YEARS'] возвращает функцию: lambda a: {'weeks': 52 * a}.Который при вызове, например, 2 вернет словарь из одного элемента: {'days': 104}.Затем он распаковывается двойной звездой (**) при передаче функции, превращая timedelta(**{'weeks': 104}) в timedelta(weeks=104).Точно так, как мы хотели.

...