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循环,但我希望避免这种情况。任何其他方法都值得赞赏。