Python:如何使dict字段相对于另一dict字段

2024-04-23 15:57:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一张这样的字典:

visits = {'visit_1': {'date': '23-11-2016'},
          'visit_2': {'date': '23-12-2016'}}

dict包含许多访问,其中“日期”是相对于访问日期的。你知道吗

问题: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)}

编辑:

初始化时不知道第一次访问。dict定义了一个相当复杂的就诊顺序(用于癌症患者的治疗)


Tags: tofromimportself编辑datetimedate字典
2条回答

Python容器(例如字典)可以自己明确地引用它们。您的示例的问题是,您不仅要存储引用,还要存储表达式的结果(其中包含引用)。这个结果本身不会保留任何关于它是如何生成的引用,因此您失去了引用。你知道吗

另一个小问题是不能创建一个对象并在同一个表达式中引用它。因为dict是可变的,所以您可以先创建它的一些元素,然后在进一步的表达式中向它添加元素,通过它的变量名引用dict。你知道吗

如果我正确理解了问题,您可以在创建字典之前定义首次访问日期:

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)

相关问题 更多 >