Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中,当值是列表时,如何遍历字典的值?_Python_List_Loops_Csv_Dictionary - Fatal编程技术网

在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”,我需要循环浏览与每个键相关的列表,并:

  • 如果列表中的第二个值大于给定的输入(我称之为p),则在列表中附加0;如果小于p,则在列表中附加1

  • 如果第一个值是负数,我需要将附加的数字乘以-1,使其成为负数

  • 下面是我现在拥有的代码(运行python 2.7):

    据我所知,那部分很有效。但我可能错了,我的错误就在那里

    与最终输出的csv文件一样,p=2的预期输出如下所示:

    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