在Python中,当值是列表时,如何遍历字典的值?
我有一本字典,它有点复杂,所以我将制作一个示例:在Python中,当值是列表时,如何遍历字典的值?,python,list,loops,csv,dictionary,Python,List,Loops,Csv,Dictionary,我有一本字典,它有点复杂,所以我将制作一个示例: final = {x: [-.5, 1], y: [.75, 2], z: [.25, 3]} 使用字典“genes”,我需要循环浏览与每个键相关的列表,并: 如果列表中的第二个值大于给定的输入(我称之为p),则在列表中附加0;如果小于p,则在列表中附加1 如果第一个值是负数,我需要将附加的数字乘以-1,使其成为负数 下面是我现在拥有的代码(运行python 2.7): 据我所知,那部分很有效。但我可能错了,我的错误就在那里 与最终输出的csv
final = {x: [-.5, 1], y: [.75, 2], z: [.25, 3]}
使用字典“genes”,我需要循环浏览与每个键相关的列表,并:
x, -1
y, 1
z, 0
相反,我只是在
x, 0
y, 0
z, 0
知道发生了什么吗?我对编程和python非常陌生,因此非常感谢您的帮助 问题在于,您正在追加字符串“0”或“1”,然后将其乘以-1。尝试将整数0或1追加,再乘以,然后将最终值转换为字符串
for v in final.itervalues():
if v[1] <= p:
v.append(1)
else:
v.append(0)
if v[0] < 0:
v[2] *= -1
final.itervalues()中v的:
如果v[1]要迭代键值对,为什么要使用iterkeys
?这是iteritems
。(实际上,您甚至不应该使用iterkeys
来迭代键,因为用于d中的k
就是这样做的。)为什么要附加字符串“0”
或“1”
?您正在尝试对列表项进行计算,因此您似乎想要整数,但看起来您有一个字符串列表或混合数据类型。将iterkeys更改为iteritems,并使用整数而不是字符串。在输出中仍然只得到0可能是因为v[0]
和v[1]
也是字符串。所以我应该从:for k,v in final.iteritems():int(v[0:])开始,然后继续循环的其余部分吗?好的,我甚至需要在结尾转换成字符串吗?或者csv writer可以写入整数吗?这取决于您希望如何将其存储在dict列表中。我会把它留作数字。我相信csv编写器会使用数字的repr值。好吧,我尝试了将v[2]设置为字符串和不将v[2]设置为字符串,在运行上述for循环后,两者仍然只输出0's,final={'y':[0.75,2,1],'x':[-0.5,1,-1],'z':[0.25,3,0]}
。您的final
值是多少?我得到一个AtributeError:'str'对象没有属性'append'
x, 0
y, 0
z, 0
for v in final.itervalues():
if v[1] <= p:
v.append(1)
else:
v.append(0)
if v[0] < 0:
v[2] *= -1