首页 > 解决方案 > Python:值未正确分配给循环中的键

问题描述

我正在尝试在 Python 中创建校准调度程序。为了测试该程序,我只想能够生成随机日期以分配给每个仪器的“属性”。由于我无法解释的原因,输出清楚地表明它randdays是正确随机化的,但当分配给last_calibrated“属性”时,它表明所有仪器的值相同!为什么会这样,我该如何避免?

instrument_props = {"last_calibrated": None,
                 "calibration_due": None,
                 "calibration_expired": None,
                 "installed": None,
                 "replaced_by": None}

instruments = {}

start_date = datetime.date(2020, 1, 1)
end_date = datetime.date(2020, 2, 1)
time_between_dates = end_date - start_date
days_between_dates = time_between_dates.days

for instrument in [4167,4958,4959,4960,4961,4962,4963,4964,4965,4966,4967,4968,4969,4970,4971,4972]:
    instruments[instrument] = instrument_props
    randdays = random.randrange(days_between_dates)
    print(randdays)
    instruments[instrument]['last_calibrated'] = start_date + datetime.timedelta(days=randdays)

pp.pprint(instruments)

这是上述代码的输出:

24
25
30
25
0
24
23
9
23
20
16
30
3
20
21
29

{   4167: {   'calibration_due': None,
              'calibration_expired': None,
              'installed': None,
              'last_calibrated': datetime.date(2020, 1, 30),
              'replaced_by': None},
    4958: {   'calibration_due': None,
              'calibration_expired': None,
              'installed': None,
              'last_calibrated': datetime.date(2020, 1, 30),
              'replaced_by': None},
    4959: {   'calibration_due': None,
              'calibration_expired': None,
              'installed': None,
              'last_calibrated': datetime.date(2020, 1, 30),
              'replaced_by': None},
    4960: {   'calibration_due': None,
              'calibration_expired': None,
              'installed': None,
              'last_calibrated': datetime.date(2020, 1, 30),
              'replaced_by': None},
    4961: {   'calibration_due': None,
              'calibration_expired': None,
              'installed': None,
              'last_calibrated': datetime.date(2020, 1, 30),
              'replaced_by': None},
    4962: {   'calibration_due': None,
              'calibration_expired': None,
              'installed': None,
              'last_calibrated': datetime.date(2020, 1, 30),
              'replaced_by': None},
    4963: {   'calibration_due': None,
              'calibration_expired': None,
              'installed': None,
              'last_calibrated': datetime.date(2020, 1, 30),
              'replaced_by': None},
    4964: {   'calibration_due': None,
              'calibration_expired': None,
              'installed': None,
              'last_calibrated': datetime.date(2020, 1, 30),
              'replaced_by': None},
    4965: {   'calibration_due': None,
              'calibration_expired': None,
              'installed': None,
              'last_calibrated': datetime.date(2020, 1, 30),
              'replaced_by': None},
    4966: {   'calibration_due': None,
              'calibration_expired': None,
              'installed': None,
              'last_calibrated': datetime.date(2020, 1, 30),
              'replaced_by': None},
    4967: {   'calibration_due': None,
              'calibration_expired': None,
              'installed': None,
              'last_calibrated': datetime.date(2020, 1, 30),
              'replaced_by': None},
    4968: {   'calibration_due': None,
              'calibration_expired': None,
              'installed': None,
              'last_calibrated': datetime.date(2020, 1, 30),
              'replaced_by': None},
    4969: {   'calibration_due': None,
              'calibration_expired': None,
              'installed': None,
              'last_calibrated': datetime.date(2020, 1, 30),
              'replaced_by': None},
    4970: {   'calibration_due': None,
              'calibration_expired': None,
              'installed': None,
              'last_calibrated': datetime.date(2020, 1, 30),
              'replaced_by': None},
    4971: {   'calibration_due': None,
              'calibration_expired': None,
              'installed': None,
              'last_calibrated': datetime.date(2020, 1, 30),
              'replaced_by': None},
    4972: {   'calibration_due': None,
              'calibration_expired': None,
              'installed': None,
              'last_calibrated': datetime.date(2020, 1, 30),
              'replaced_by': None}}

标签: python-3.xdictionarydatetimefor-looprandom

解决方案


推荐阅读