【问题标题】:Iterating over a dictionary (follow up to previous question)遍历字典(跟进上一个问题)
【发布时间】:2022-11-25 21:54:23
【问题描述】:

你好,我是 python 的新手,我正在构建一个小程序,如果字符串是等值线(没有连续或不连续的重复字母的单词),则返回 false,否则返回 false。 它还忽略字母大小写。

到目前为止,我已经初始化了一个空字典,它将存储包含字母(作为键)及其频率(值)的键值对 然后我用 for 循环进行迭代,在每次迭代中,字典都会用字母及其计数进行更新。 如果它已经有了字母,那么它会将键值递增 1,否则它会保持初始化为 1。

def is_isogram(string):
  dict = {}
  for letter in string.lower():
    #if we have the letter
    if letter in dict:
        dict[letter] += 1
    # if we don't have the letter
    else:
        dict[letter] = 1

现在我要实际确定它是否是一个等值图,我遍历字典键,并写下一个条件。 但是,它一直给我完全相反的输出。

  for values in dict:
    if dict[values] > 1:
      return False 
    else:
      return True

输出:真

我也尝试了列表理解和 lambda,但我一直得到相同的结果,我每次都得到 True。 有谁知道为什么?

【问题讨论】:

    标签: python dictionary for-loop if-statement


    【解决方案1】:

    首先欢迎使用 Python!我看了一下,问题似乎出现在您的第二个代码部分,即字典值的 for 循环中。

    在循环中添加打印语句可能有助于将来调试此类事情,即

    for values in dict:
        print(values)
        if dict[values] > 1:
          return False 
        else:
          return True
    

    提示:这应该向您表明您只查看任何给定字符串中的第一个字母并过早返回!要解决此问题,您需要移动“return True”部分,直到您完毕检查字符串中的每个字母。

    解决这个问题应该让您的代码按预期工作!此外,随着您对 Python 的深入了解,您可能会发现有许多方法可以解决同一问题。特别是对于这个问题,here 可以找到更“高效”或“优雅”的方法,但同样,有许多不同的方法可以解决任何问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-24
      • 2019-09-24
      • 2017-05-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多