我试图在循环输入一些输入数据时创建单独的字典条目。部分数据用于密钥,而不同部分用作与该密钥关联的值。我遇到了一个问题(由于Python' s#34;所有东西都是一个对象,你引用那个对象"操作方法),因为迭代通过我的循环改变了密钥集之前的迭代,从而覆盖先前设置的值,而不是创建新的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
调用),也会像字符串一样处理。 / p>
我在这里错过了什么/做错了什么?到目前为止,我还没有找到任何可以帮助我解决这个问题的东西(尽管你们已经回答了我已经遇到的其他Python问题很多,即使你已经遇到过我不知道。我知道它失败的原因;或者,我认为我这样做 - 它是因为当我更新datid
的值时,即使我没有',键也会指向新的datid
值对象。想要它,对吗?我只是不知道如何修复或解决这种行为。说实话,这是我不喜欢用Python工作的一件事(希望一旦我理解它,我会更喜欢它;直到那时......)。
答案 0 :(得分:0)
只需更改最后一行
popcount = { datid : int(dat4) } # This does not do what you want
这会创建一个新的dict
并将其分配给popcount
,从而丢弃以前的数据。
您要做的是向dict
添加条目:
popcount[datid] = int(dat4)