【问题标题】:string number average returned in string format以字符串格式返回的字符串数平均值
【发布时间】:2018-01-03 19:53:36
【问题描述】:

这里有一些测试:

输入:"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

【问题讨论】:

  • 您也可以使用以下代码计算平均值:int(sum([num_dic[s] for s in str_split]) / len(str_split))
  • 你有没有期望一个数字的单词被输入你的函数两次? l例如:"two zero nine five two"
  • 要执行查找,而不是尝试反转整个字典,我会使用 items() 或 iteritems() 回答 here。也就是说,除非切换键值有未来价值。

标签: python dictionary iteration key-value


【解决方案1】:

你可以试试这个:

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

【讨论】:

    【解决方案2】:

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

    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,以平均值为索引,取回字符串版本。

    【讨论】:

    • 如何让return num_list[int_sum // len(str_split)](或更糟糕的是return num_list[int(round(1.0 * int_sum / len(str_split)))])让它在 Python2 和 Python 3 中工作,因为 OP 没有指定版本。
    【解决方案3】:

    这是你如何逆字典。这是一个重复的问题:

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

    【讨论】:

      【解决方案4】:

      据我所知,没有办法在字典中按值查找。相反,您可以遍历 dict 以找到正确的值,如下所示:

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

      您可以在这里找到另一个问题:Get key by value in dictionary

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-26
        • 1970-01-01
        • 1970-01-01
        • 2018-12-29
        • 1970-01-01
        • 2017-04-05
        相关资源
        最近更新 更多