Python 使用字典更改变量的参数

Python 使用字典更改变量的参数,python,dictionary,timedelta,Python,Dictionary,Timedelta,我试图使用字典来更改插入函数参数中的值 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

我试图使用字典来更改插入函数参数中的值

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]
会给出一个字符串


我可以用其他方式实现吗?

是的,您可以,使用字典解包和lambda函数

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

... timedelta(**Dict1[horizon](x)) ... 
这是如何工作的?


首先,Dict1['YEARS']返回一个函数:
lambda:{'weeks':52*a}
。当使用例如
2
调用时,它将返回一个单元素字典:{'weeks':104}。然后,当传递给函数时,它被双星(**)解包,将
timedelta(**{'weeks':104})
转换为
timedelta(weeks=104)
。正是我们想要的

可以,利用字典解包和lambda函数

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

... timedelta(**Dict1[horizon](x)) ... 
这是如何工作的?


首先,Dict1['YEARS']返回一个函数:
lambda:{'weeks':52*a}
。当使用例如
2
调用时,它将返回一个单元素字典:{'weeks':104}。然后,当传递给函数时,它被双星(**)解包,将
timedelta(**{'weeks':104})
转换为
timedelta(weeks=104)
。正是我们想要的

我已从datetime导入timedelta。一种方法是使用IF-ELSE循环,但我希望避免这种情况。我已经从datetime导入了timedelta。一种方法是使用IF-ELSE循环,但我希望避免这种情况。任何其他方法都值得赞赏。