Python:如何相对于另一个dict字段创建一个dict字段

时间:2016-11-25 18:00:51

标签: python

我有一个看起来像这样的字典:

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)}

修改

初始化时不知道第一次访问。该词典定义了一个相当复杂的访视序列(用于治疗癌症患者)

2 个答案:

答案 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。