在循环中创建时,字典键被覆盖

克伦沙拉

我正在尝试在循环访问某些输入数据时创建单独的字典条目。部分数据用作键,而另一部分用作与该键关联的值。我遇到了一个问题(由于 Python 的“一切都是对象,而您引用该对象”操作方法),因为我的循环中的任何迭代都会改变先前迭代中的键集,从而覆盖先前设置的值,而不是创建一个新的 dict 键并用它自己的值设置它。

popcount = {}
for oneline of datafile:
  if oneline[:3] == "POP":
    dat1, dat2, dat3, dat4, dat5, dat6 = online.split(":")
    datid = str.join(":", [dat2, dat3])
    if datid in popcount:
      popcount[datid] += int(dat4)
    else:
      popcount = { datid : int(dat4) }

这将迭代七行数据(datafile是一个包含该信息的列表),并且应该为 分别创建四个键datid,每个都有自己的值。然而,最终发生的是,datid当代码运行时,字典中只存在最后一个值出现这种情况是有重复的人,而他们得到适当的总结(所以,至少我知道的是代码工作的一部分,但其他的键条目只是被...走了。

数据是从文件中读取的,以冒号 ( :) 分隔,即使是数字(因此在 中的int()调用),也将其视为字符串if datid in popcount

我在这里错过了什么/做错了什么?到目前为止,我还没有找到任何可以帮助我解决这个问题的东西(尽管你们已经回答了我遇到许多其他 Python 问题,即使你们不知道)。我知道为什么它失败了;或者,我想我这样做 - 这因为当我更新datid的值时,datid即使我不希望它指向新的值对象,对吗?我只是不知道如何修复或解决这种行为。老实说,这是我不喜欢在 Python 中工作的一件事(希望一旦我掌握了它,我会更喜欢它;直到那时......)。

奥利维尔·梅朗松

只需更改您的最后一行

popcount = { datid : int(dat4) } # This does not do what you want

这将创建一个新的dict并将其分配给popcount,丢弃您以前的数据。

你想要做的是添加一个条目到你的dict

popcount[datid] = int(dat4)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章