gpt4 book ai didi

python-3.x - 使用嵌套字典 Python 的自定义类

转载 作者:行者123 更新时间:2023-12-03 17:11:29 26 4
gpt4 key购买 nike

我在使用相同的键在嵌套字典中添加值时遇到问题,并且值始终显示相同的值,事实是,我想在键相同的情况下更新值事件。该算法是人工鱼群算法的基础

# 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 不会为相同的变量名生成新的内存,所以你所有的字典键都指向相同的值=fish_value,它会被覆盖,你所有的字典值都采用 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))

关于python-3.x - 使用嵌套字典 Python 的自定义类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55885842/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com