首页 > 解决方案 > 如何在 Python 中创建字典元组

问题描述

我有一个问题,我正在编辑字典的一个键的值,然后我想将这些字典存储为元组的条目。但问题是元组似乎是通过引用添加字典。

此处提供了示例代码:

import numpy as np

if __name__ == "__main__":
    dict_decision = {'policy': 'decision-rule',
                     'file': 'policy', 'nopts': 1, 'vect_td': 10}

    lifetime = 40;  # years
    vect_td = np.arange(1,lifetime)
    tup_dict = ()
    count = 0

    for td in vect_td:
        dict_decision.update({'vect_td':int(td)})
        #print(dict_decision)
        tup_dict = tup_dict + (dict_decision,)
        count = count + 1

在 for 循环的末尾,字典dict_decision有键vect_td= 39。当我检查 tup_dict 时,存储在里面的所有字典都有vect_td=39实际上我希望它们在 1 到 39 之间变化。它似乎已经通过dict_decision引用传递了字典。我应该怎么做才能纠正这种情况?

标签: pythondictionarytuples

解决方案


发生这种情况是因为当您调用时dict_decision.update(...),您会在循环的每次迭代中更新相同的 dict 实例。这意味着您的元组确实包含对同一字典的大量引用。

如果你在调用update它之前复制原始字典,它可能会更好:

for td in vect_td:
    td_dict = dict_decision.copy()
    td_dict.update({'vect_td': int(td)})
    tup_dict = tup_dict + (td_dict,)
    count = count + 1

正如对您的问题的评论中所建议的那样,您可能还需要一个列表而不是一个元组,这样您就不必为循环的每次迭代创建新的元组,但这与您的问题并不严格相关。


推荐阅读