如何在Python中创建字典元组

时间:2019-11-12 09:05:19

标签: python dictionary tuples

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

此处提供了示例代码:

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。我该怎么办才能纠正这种情况?

1 个答案:

答案 0 :(得分:1)

之所以会发生这种情况,是因为调用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

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