【问题标题】:Altering the variables in a dictionary Python更改字典 Python 中的变量
【发布时间】:2021-10-02 12:33:10
【问题描述】:

在下面的代码中,我创建了 3 次字典。我想更改Strategy 2 的Ontrade 值的值。我试图获得低于 Strategy 2 的 Ontrade 值等于 False 的预期输出。我怎样才能改变它?

import numpy as np 

listrange = 3
data = {}
dict_integrity = {"Array": np.array([]), "last_timestamp": 0, "last_Trades": 0, "Order_id_list": 0, "Ontrade": True, "TakeProfits": 0, "StopLoss": 0}

for x in range(listrange):
    data["Strategy " + str(x)] = dict_integrity

alteration = data["Strategy " + str(2)]["Ontrade"] = False

输出:

{'Strategy 0': {'Array': array([], dtype=float64),
                'Ontrade': True,
                'Order_id_list': 0,
                'StopLoss': 0,
                'TakeProfits': 0,
                'last_Trades': 0,
                'last_timestamp': 0},
 'Strategy 1': {'Array': array([], dtype=float64),
                'Ontrade': True,
                'Order_id_list': 0,
                'StopLoss': 0,
                'TakeProfits': 0,
                'last_Trades': 0,
                'last_timestamp': 0},
 'Strategy 2': {'Array': array([], dtype=float64),
                'Ontrade': True,
                'Order_id_list': 0,
                'StopLoss': 0,
                'TakeProfits': 0,
                'last_Trades': 0,
                'last_timestamp': 0}}

预期输出:

{'Strategy 0': {'Array': array([], dtype=float64),
                'Ontrade': True,
                'Order_id_list': 0,
                'StopLoss': 0,
                'TakeProfits': 0,
                'last_Trades': 0,
                'last_timestamp': 0},
 'Strategy 1': {'Array': array([], dtype=float64),
                'Ontrade': True,
                'Order_id_list': 0,
                'StopLoss': 0,
                'TakeProfits': 0,
                'last_Trades': 0,
                'last_timestamp': 0},
 'Strategy 2': {'Array': array([], dtype=float64),
                'Ontrade': False,
                'Order_id_list': 0,
                'StopLoss': 0,
                'TakeProfits': 0,
                'last_Trades': 0,
                'last_timestamp': 0}}

【问题讨论】:

  • 因为你不断地向每个键添加与值相同的字典:data["Strategy " + str(x)] = dict_integrity。您必须创建一个新字典,并且很可能您希望所有值也都是新对象
  • 换句话说,“在下面的代码中我创建了字典 3 次”是错误的。您只创建一次该字典

标签: python arrays json python-3.x dictionary


【解决方案1】:

它不起作用的原因是因为您正在为新字典分配对旧字典的引用。因此,当您更改新字典一部分中的值时,您实际上只是更改了原始字典,python 使用该字典获取新字典所有部分的信息。

要解决此问题,您需要复制原始字典,可以这样做。

data["Strategy " + str(x)] = dict(dict_integrity)

如果您还有其他问题,此链接会有所帮助。 How to copy a dictionary and only edit the copy

作为旁注,你应该有

data["Strategy " + str(2)]["Ontrade"] = False

并在更改值时删除“alteration =”部分

【讨论】:

  • 注意,OP 可能也想复制数组
  • 非常感谢
  • 这会复制包含数组的整个字典,因此应该不会有任何问题。
【解决方案2】:

您可以通过简单地添加这一行来做到这一点 - data["Strategy " + str(2)]["Ontrade"] = False。
这将起作用,现在数据具有更新值。

【讨论】:

    猜你喜欢
    • 2019-10-03
    • 1970-01-01
    • 2015-02-08
    • 2022-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-03
    相关资源
    最近更新 更多