python - 使用字典更改变量的参数
问题描述
我正在尝试使用字典来更改插入函数参数中的值。
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 a: {'weeks': 52 * a}
. 例如,当调用它时2
将返回一个元素字典:{'weeks': 104}。然后, this 在传递给函数时被双星 (**) 解包,timedelta(**{'weeks': 104})
变成timedelta(weeks=104)
. 正是我们想要的。
推荐阅读
- java - 在 Javafx 中更新或删除后如何刷新数据库表视图?
- web-worker - 对于某些 OffscreenCanvas 功能,Web Worker 是否会在主线程上阻塞?
- jmeter - 如何在 JMeter 中向子采样器添加断言
- angular - 如何在 Jasmine 中为 localStorage 值编写单元测试用例
- javascript - 如何使具有动态内容的reactstrap模态可调整大小和可拖动?
- javascript - 想要在点击搜索按钮时添加搜索结果
- mozilla - Notification.requestPermission() 在 Mozilla 上抛出错误
- excel - MessageBox 依赖于值是另一个值的倍数
- vue.js - 如何在 Sweetalert2 模态中使用 Vuex?
- dhall - 有没有办法在 Dhall 中显示没有科学记数法的 Double?