【问题标题】:`SyntaxError` in if-else one-linerif-else 单行中的`SyntaxError`
【发布时间】:2021-04-14 02:19:19
【问题描述】:

我写了这段代码,但是因为SyntaxError所以它不起作用。

def char_freq(message):
    d = dict()
    for ch in message:
        d[ch] += 1 if ch in d else d[ch] = 1
    return d                             ^ SyntaxError: End of statement expected

我不知道如何重写表达式以将 if-else 保留在一行中并使其正常工作。

我知道可以将函数实现为一个简单的 for 循环,但我不明白,为什么我的 if-else 单行代码会导致 SyntaxError?

【问题讨论】:

  • d[ch] = (d[ch] + 1) if ch in d else 1. 你应该试试这个。
  • 谢谢,它有效。但我不明白为什么我的问题中的符号不​​起作用。
  • 语法类似于 -> a = if else

标签: python dictionary if-statement syntax conditional-operator


【解决方案1】:

按照您的要求保留if/else 做

d[ch] = (d[ch] + 1) if ch in d else 1

但是dict.get() 语法更好d[ch] = d.get(ch, 0) + 1

或collections.defaultdict 和int 工厂

def char_freq(message):
    d = defaultdict(int)
    for ch in message:
        d[ch] += 1
    return d

【讨论】:

  • 感谢您的回答。我还是很好奇,为什么我的符号会出错?
  • @EvgeniyGlovin 您不能在 if/else 部分中进行分配
【解决方案2】:

把d 变成defaultdict 然后你就可以完全忽略这个语句了

from collections import defaultdict
def char_freq(message):
    d = defaultdict(int)
    for ch in message:
        d[ch] += 1
    return d     

看起来你只是在计算字符,所以你可以使用counter

from collections import Counter
def char_freq(message):
    return Counter(message)

【讨论】:

  • 感谢您的回复,改进我的代码的好方法!
猜你喜欢
  • 2023-01-05
  • 1970-01-01
  • 1970-01-01
  • 2012-11-02
  • 2015-05-16
  • 1970-01-01
  • 1970-01-01
  • 2021-03-07
相关资源
最近更新 更多