【问题标题】:How to create a tuple of dictionaries in Python如何在 Python 中创建字典元组
【发布时间】:2019-11-12 09:05:19
【问题描述】:

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

此处提供了示例代码:

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

【问题讨论】:

  • 因为您在构建元组时不断添加 相同的 dicttup_dict = tup_dict + (dict_decision,) 顺便说一句,您在这里所做的意味着您可能只想要一个 @987654330 @.
  • 谢谢。我不知道复制功能。

标签: python dictionary tuples


【解决方案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

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

【讨论】:

  • 非常感谢@Frost。这两个建议都非常有帮助。我不知道复制功能。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-22
  • 2015-02-17
  • 2021-03-02
  • 1970-01-01
  • 2017-05-07
  • 2014-03-10
  • 2017-04-28
相关资源
最近更新 更多