使用嵌套字典Python的自定义类

2024-04-13

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

# 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))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用嵌套字典Python的自定义类 的相关文章

随机推荐