python-3.x - 使用嵌套字典 Python 的自定义类
问题描述
使用相同的键在嵌套字典中添加值时出现问题,并且值始终显示相同的值,事实是,我想更新键相同的值事件。该算法是人工鱼群算法的基础
# example >> fish_template = {0:{'weight':3.1,'visual':2,'step':1},1:'weight':3,'visual':4,'step':2}}
fish = {}
fish_value = {}
weight = [3.1, 3, 4.1, 10]
visual = [2, 4, 10, 3]
step = [1, 2, 5, 1.5]
len_fish = 4
for i in range(0,len_fish):
for w, v, s in zip(weight, visual, step):
fish_value["weight"] = w
fish_value["visual"] = v
fish_value["step"] = s
fish[i] = fish_value
print("show fish",fish)
我希望结果像fish_template,但事实并非如此。'weight'、'visual'、'step' 键的值始终与 0、1、2 和 3 的值相同。有什么解决方案吗?
解决方案
问题在于fish[i]
,您只需dict
使用相同的元素创建一个:fish_value
。Python 不会为相同的变量名生成新内存,因此所有 dict 键都指向相同的 value= fish_value
,它会被覆盖,并且所有 dict 值都采用fish_value
. 为了克服这个问题,您可以执行以下操作:
fish = {}
weight = [3.1, 3, 4.1, 10]
visual = [2, 4, 10, 3]
step = [1, 2, 5, 1.5]
len_fish = 4
for i in range(0, len_fish):
fish[i]= {"weight": weight[i], "visual": visual[i], "step": step[i]}
print("show fish", fish)
正如@Error 提到的,for 循环可以用这个单行替换:
fish = dict((i, {"weight": weight[i], "visual": visual[i], "step": step[i]}) for i in range(len_fish))
推荐阅读
- knapsack-problem - 具有两种利润动机的无界背包问题
- kubernetes-helm - RKE 集群上的 Rancher 设置
- c# - 影响 Selenium 的代理黑名单
- reactjs - 将数据从一个功能组件传递到另一个
- python - 如何构建一个返回包含多个特定外键的对象的查询?
- python - 如何在 linux 上完全在本地使用 python 模块
- python - 如何在seaborn的stripplot图例中更改标记
- amazon-dynamodb - 生产使用 DynamoDB 的最佳容量是多少?
- sql - 如何在 Big Query 中获取我正在处理的项目名称?
- java - apache ignite java瘦客户端过期条目监听器