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
对象在nextf
中签入值,并对其进行一些计算。我不是说您不需要它,我是说fa=f
正在创建您不想要的行为。试着用这一行来代替我的答案,你很可能会得到预期的结果。谢谢。它工作起来很有魅力。但我会在代码中寻求一些帮助tym_check()
将通过使用fa
检查f
,在条件对应的一对一上添加值。如果小于,则应添加f
中的值,如果不按原样传递。我认为您应该打开另一个问题,然后。tym_save()
函数用于保存从f
创建到fa
的词典的第一次。因为,我想使用fa
对象在nextf
中签入值,并对其进行一些计算。我不是说您不需要它,我是说fa=f
正在创建您不想要的行为。试着用这一行来代替我的答案,你很可能会得到预期的结果。谢谢。它工作起来很有魅力。但我会在代码中寻求一些帮助tym_check()
将通过使用fa
检查f
,在条件对应的一对一上添加值。如果小于,则应在f
中添加值,如果不按原样传递,则应打开另一个问题。