我有一个看起来像这样的字典:
visits = {'visit_1': {'date': '23-11-2016'},
'visit_2': {'date': '23-12-2016'}}
该词典包括许多访问,其中“约会”日期为'是相对于visit_1日期。
问题: python dict是否可以引用self?像这样:
from datetime import datetime, timedelta
visits = {'visit_1': {'date': datetime('23-11-2016')},
'visit_2': {'date': <reference_to_self>['visit_1']['date'] + timedelta(weeks=4)}
修改
初始化时不知道第一次访问。该词典定义了一个相当复杂的访视序列(用于治疗癌症患者)
答案 0 :(得分:3)
如果我正确理解了问题,您可以在创建字典之前定义第一个访问日期:
from datetime import datetime, timedelta
visit1_date = datetime(2016, 11, 23)
visits = {'visit_1': {'date': visit1_date},
'visit_2': {'date': visit1_date + timedelta(weeks=4)}}
print(visits)
为了进一步扩展,您可能会有一个visits
工厂,它会根据开始日期和访问次数动态创建访问字典(假设访问次数)平均每4个星期来一次):
from datetime import datetime, timedelta
def visit_factory(start_date, number_of_visits):
return {'visit_%d' % (index + 1): start_date + timedelta(weeks=4 * index)
for index in range(number_of_visits)}
visits = visit_factory(datetime(2016, 11, 23), 2)
print(visits)
答案 1 :(得分:2)
Python容器(例如词典)可以肯定地引用它们自己。您的示例的问题在于您不仅存储引用,而且还存储表达式的结果(涉及引用)。这个结果本身不会对它的制作方式做任何参考,所以你放弃了参考。
另一个小问题是您无法创建对象并在同一表达式中引用它。既然dicts是可变的,你可以先创建它的一些元素,然后在进一步的表达式中添加元素,通过变量名来引用dict。