弦数均返回字符串格式

问题描述:

下面是一些测试:弦数均返回字符串格式

输入:"zero nine five two"

输出:"four"

输入:"four six two three"

输出继电器:"three"

这里是我的代码,它的工作,直到最后一步,我需要反向查找关键的价值,我不知道该怎么做。有什么建议?

def average_string(s): 
    num_dic = {'zero': 0, 'one': 1, 'two': 2, 'three': 3, 'four': 4, 'five': 5, 
    'six': 6, 'seven': 7, 'eight': 8, 'nine': 9} 
    str_split = s.split() 
    int_values = [] 
    for key, val in num_dic.items(): 
     if key in str_split: 
      int_values.append(val) 
      int_avg = int(sum(int_values)/len(int_values)) 
    return int_avg 
+0

重复:https://*.com/questions/483666/python-reverse-invert-a-mapping – nanojohn

+0

你也可以用下面的代码计算你的平均值:int(sum([num_dic [s] for s in str_split])/ len(str_split))' – Kedrzu

+0

你有没有想过有一个数字字输入你的函数两次?例如:''two zero nine five two'' – jacoblaw

这是你如何反转字典。这是一个重复的问题,虽然:

inv_dic = {v: k for k, v in num_dic.items()} 

据我所知,没有一种方法来查找字典的价值。相反,你可以遍历所有的字典,找到正确的值是这样的:

for text, number in num_dic.iteritems(): 
    if number == int_avg: 
     print text 

这里是另外一个问题,你可以找到这个:Get key by value in dictionary

您可以在Python 3使用num_dic.items()

你可以试试这个:

num_dic = {'zero': 0, 'one': 1, 'two': 2, 'three': 3, 'four': 4, 'five': 5, 'six': 6, 'seven': 7, 'eight': 8, 'nine': 9} 

s = "zero nine five two" 

new_dict = {b:a for a, b in num_dic.items()} 

average = sum(num_dic[i] for i in s.split())/float(len(s.split())) 

final_average = new_dict[average] 

输出:

four 

为什么不仅仅使用单词列表来表示索引代表其各自值的数字?

def average_string(s): 
    num_list = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine'] 
    str_split = s.split() 
    int_sum = sum(map(num_list.index, str_split)) 
    return num_list[int_sum/len(str_split)] 

的地图上越过每个元素在str_split并通过使用每个元素作为参数调用num_list.index()其转换成数字版本。

最后使用相同的num_list,使用平均值作为索引来获取字符串版本。

+0

'return num_list [int_sum // len(str_split)]'(或者更糟糕的是,返回num_list [int(round(1.0 * int_sum/len(str_split)))]'),以允许它在Python2和因为OP没有指定版本,所以Python 3。 – cdlane