嗨,我正在尝试在下面的输入示例中添加第3列:
输入1:
act hi 1
act bye 2
act ciao 5
输入2:
^{pr2}$具有以下所需输出:
act-art hi 2
act-art bye 4
act-art kiss 5
act-art ciao 5
下面是我一直在使用的代码。在
def sumVectors(classB_infile, classA_infile, outfile):
class_dictA = {}
with open(classA_infile, "rb") as opened_infile_A:
for line in opened_infile_A:
items = line.split()
classA, feat, valuesA = items[:3]
class_dictA[feat] = float(valuesA)
class_dictB = {}
with open(classB_infile, "rb") as opened_infile_B:
for line in opened_infile_B:
items = line.split()
classB, feat, valuesB = items[:3]
class_dictB[feat] = float(valuesB)
#print classA, classB, feat, sumVectors
####outfile
with open(outfile, "wb") as output_file:
for key in class_dictA:
if key in class_dictB:
weight = class_dictA[key] + class_dictB[key]
#outstring = "\t".join([classA + "-" + classB, key, str(weight)])
else:
weight = class_dictA[key]
outstring = "\t".join([classA + "-" + classB, key, str(weight)])
output_file.write(outstring + "\n")
for key in class_dictB:
if key in class_dictA:
weight = class_dictB[key]
outstring = "\t".join([classA + "-" + classB, key, str(weight)])
output_file.write(outstring + "\n")
但是,它给出了以下输出:
act-art stress 5.0
act-art bye 2.0
act-art hi 1.0
act-art kiss 1.0
有没有什么见解可以解释为什么第二列中的值不求和? 谢谢你
这包含实现所需结果的最简单的修复:
不过,这确实可以简化:
^{pr2}$我建议使用defaultdict,而不是编写两个循环来实现两个字典的“合并”:
这将创建一个新的
result
字典,它是class_dictA
的副本。然后,将class_dictB
中的所有值添加到result
字典中。如果一个键还不存在,它将被视为具有值(这就是调用float()
所做的)。在相关问题 更多 >
编程相关推荐