2

我有这个 python 函数,它接受 2 个参数(字符串、字典)并返回一个浮点数。该函数旨在取分数和字符串字典中整数的平均值。

def happiness_score(string, dic):
   keys = string.lower().split()
   v = sum(dic[key] for key in keys)
   return float(v)/len(keys)

我有这个有效的测试用例:

print happiness_score("a b" , {"a":(1.2) , "b":(3.4)})
>>> 2.3

我还有一个带有元组的测试用例:

print happiness_score("a b" , {"a":(1,2) , "b":(3,4)})

如何更改我的代码,以便我可以将任何给定的元组转换为整数,以便我仍然可以运行我的程序?

4

3 回答 3

1

尝试使用我的忍者读心技巧来猜测您想如何将元组转换为浮点数,也许您想要:

def tup2float(tup):
    return float('.'.join(str(x) for x in tup))

这仅适用于 2 元组...

一些结果:

>>> tup2float((1,2))
1.2
>>> tup2float((2,3))
2.3
>>> tup2float((2,30))
2.3
>>> tup2float((2,32))
2.32
于 2012-10-19T02:03:41.417 回答
0

假设您将文件读入一个名为lines

hrs, miles = zip(*[(float(line.split()[-4]), float(line.split()[-2])) for line in lines if 'miles' and 'hrs' in line])
total_hrs = sum(hrs)
total_miles = sum(miles)
于 2015-01-18T16:57:29.350 回答
0

我将假设您希望这种情况下的答案是 (2, 3)。换句话说,您希望将元组中的每个元素都视为单独均值的来源。

def happiness_score(dic):
   scores = map(sum, zip(*d.values()))
   return [float(v)/len(dic) for v in scores]

第一步是为每个元组元素创建一组值:

d = {'a': (1, 2), 'b': (3, 4)}
zip(*d.values())
[(1, 3), (2, 4)]

然后使用 map 将 sum 应用于每个元组。

于 2012-10-19T01:55:21.813 回答