Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.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_Dictionary - Fatal编程技术网

Python字典值中的问题

Python字典值中的问题,python,dictionary,Python,Dictionary,我想比较两个字典对象与一对一的对应关系。当dict f中有更新时,它应该与dict fa进行比较。但是在我的代码中,当我更新dict f时,它也会更新dict fa。因此,这些值相加,这对于比较来说毫无意义。有人能帮我吗 def tym_save(node_add, data, f, fa, f2): if str(node_add) in f: # check for the older value f2 = tym_check(f[str(node_a

我想比较两个字典对象与一对一的对应关系。当
dict f
中有更新时,它应该与
dict fa
进行比较。但是在我的代码中,当我更新
dict f
时,它也会更新
dict fa
。因此,这些值相加,这对于比较来说毫无意义。有人能帮我吗

def tym_save(node_add, data, f, fa, f2):
    if str(node_add) in f:
        # check for the older value
        f2 = tym_check(f[str(node_add)],fa[str(node_add)],f2)
    else:
        f[str(node_add)] = data
        fa = f
        print 'f-> ', f, 'fa-> ', fa
    return f, fa, f2
def tym_check(f_list,fa_list,f2_list):
    for i in range(len(f_list)):
        if f_list[i] > fa_list[i]:
            fa_list[i] = f_list[i]
        else:
            print f_list, fa_list, f2_list
            f2_list[i] = fa_list[i]
            f_list[i] = f_list[i] + f2_list[i]
    print f_list, fa_list,f2_list
    print 'yo'
    return f2_list


if __name__ == '__main__':
    f = {}
    fa = {}
    f2 = [0,0,0,0]
    add = '0013a2'
    data = [1.0, 0.0, 0.342, 0.3]
    f, fa, f2 = tym_save(add, data, f, fa,f2)
    data = [2.0, 1.0, 0.342, 0.3]
    f[str(add)] = data    
    ## Here the fa is also updating.
    f, fa, f2 = tym_save(add, data, f, fa,f2)
    add = '0013a2'
    data = [0.0, 0.0, 0.0, 0.0]
    f, fa, f2 = tym_save(add, data, f, fa,f2)

tym_save()
函数中有一个条件赋值
fa=f
。这导致了您描述的不希望出现的行为,因为每次更新f时,您也在更新fa(它们指向同一点)。相反,您希望复制f。你可以这样做:

import copy
fa = copy.deepcopy(f)

tym_save()
函数中有一个条件赋值
fa=f
。这导致了您描述的不希望出现的行为,因为每次更新f时,您也在更新fa(它们指向同一点)。相反,您希望复制f。你可以这样做:

import copy
fa = copy.deepcopy(f)

这一行的功能是什么?它正在创建对dict的第二个引用,该dict最初称为
f
@tadhgsen实际上,
fa
用于扫描
f
,当它以不同的值到达下一个dict时。当
f['0013a200']
中没有数据时,赋值
fa=f
处于状态。是的,但您将其赋值为指向同一对象的指针,因此似乎同时更新了这两个对象。@Tadhgmald Jensen您能建议我怎么做吗?代码将不胜感激。fa=f这一行应该完成什么?它正在创建对dict的第二个引用,该dict最初称为
f
@tadhgsen实际上,
fa
用于扫描
f
,当它以不同的值到达下一个dict时。当
f['0013a200']
中没有数据时,赋值
fa=f
处于状态。是的,但您将其赋值为指向同一对象的指针,因此似乎同时更新了这两个对象。@Tadhgmald Jensen您能建议我怎么做吗?代码将不胜感激。tym_save()函数用于在字典从f创建到fa时首次保存。因为,我想使用
fa
对象在next
f
中签入值,并对其进行一些计算。我不是说您不需要它,我是说
fa=f
正在创建您不想要的行为。试着用这一行来代替我的答案,你很可能会得到预期的结果。谢谢。它工作起来很有魅力。但我会在代码中寻求一些帮助
tym_check()
将通过使用
fa
检查
f
,在条件对应的一对一上添加值。如果小于,则应添加
f
中的值,如果不按原样传递。我认为您应该打开另一个问题,然后。
tym_save()
函数用于保存从
f
创建到
fa
的词典的第一次。因为,我想使用
fa
对象在next
f
中签入值,并对其进行一些计算。我不是说您不需要它,我是说
fa=f
正在创建您不想要的行为。试着用这一行来代替我的答案,你很可能会得到预期的结果。谢谢。它工作起来很有魅力。但我会在代码中寻求一些帮助
tym_check()
将通过使用
fa
检查
f
,在条件对应的一对一上添加值。如果小于,则应在
f
中添加值,如果不按原样传递,则应打开另一个问题。