【发布时间】:2023-03-14 02:59:02
【问题描述】:
我有一本字典,有点复杂,所以我做个例子:
final = {x: [-.5, 1], y: [.75, 2], z: [.25, 3]}
使用字典“基因”,我需要遍历与每个键关联的列表,并且:
如果列表中的第二个值大于给定输入(我称之为 p),则将 0 附加到列表中,如果小于 p,则将 1 附加到列表中。
如果第一个值为负数,我需要将附加的数字乘以-1,使其为负数。
这是我现在的代码(运行 python 2.7):
for k, v in final.iterkeys():
if v[1] <= p:
v.append("1")
else:
v.append("0")
if v[0] < 0:
v[2] *= -1
之后,我只将键(在本例中为 x、y 和 z)和附加的数字写入 csv 文件。如果您想知道,这是我的代码:
writer = csv.writer(open("result.csv", "wb"))
for k, v in final.iteritems():
writer.writerow([k, v[2]])
据我所知,该部分有效。但我可能是错的,我的错误实际上是存在的
p=2 的预期输出,与最终输出的 csv 文件一样,如下所示:
x, -1
y, 1
z, 0
相反,我只是得到
x, 0
y, 0
z, 0
知道发生了什么吗?我对编程和 python 还很陌生,因此非常感谢任何帮助!
【问题讨论】:
-
如果要遍历键值对,为什么要使用
iterkeys?那是iteritems。 (实际上,您甚至不应该使用iterkeys来遍历键,因为for k in d会这样做。) -
为什么要附加字符串
"0"或"1"而不是整数?您正在尝试对列表项进行数学运算,因此您似乎想要整数,但看起来您有一个字符串列表或混合数据类型。 -
将 iterkeys 更改为 iteritems,并使用整数而不是字符串。输出中仍然只有 0
-
可能是因为
v[0]和v[1]也是字符串。 -
那么我应该从:for k, v in final.iteritems(): int(v[0:]) 开始,然后继续循环的其余部分吗?
标签: python list loops csv dictionary