将元组转换为整数

时间:2012-10-19 01:28:39

标签: python string dictionary tuples average

我有这个python函数,它接受2个参数( string,dictionary )并返回一个float。该函数旨在获取分数和字符串的整数内的整数的平均值。

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)})

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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加到每个元组。

答案 2 :(得分: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)