我正在尝试在循环访问某些输入数据时创建单独的字典条目。部分数据用作键,而另一部分用作与该键关联的值。我遇到了一个问题(由于 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] 删除。
我来说两句