if-else 一行中的“SyntaxError”

`SyntaxError` in if-else one-liner

我写了这段代码,但是因为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

如您所愿if/else

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

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

collections.defaultdictint 工厂

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

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)