Python列表推导式中为字典赋值遇语法错误,请求协助解决
问题分析与解决
你的代码错误根源在于:列表推导式中不能放置赋值语句(包括+=这类增强赋值)。列表推导式的设计目的是生成列表,内部只能写能返回值的表达式,而赋值是语句,不符合推导式的语法规则。另外你代码里的if s in Input逻辑完全多余——s本身就是从Input里遍历出来的元素,这个判断永远为真。
正确写法1:普通for循环(最直观)
all_freq = {} Input = 'google.com' for s in Input: if s in all_freq: all_freq[s] += 1 else: all_freq[s] = 1
正确写法2:用字典get方法简化
all_freq = {} Input = 'google.com' for s in Input: all_freq[s] = all_freq.get(s, 0) + 1
正确写法3:用collections.defaultdict
from collections import defaultdict all_freq = defaultdict(int) Input = 'google.com' for s in Input: all_freq[s] += 1
正确写法4:用collections.Counter(最Pythonic)
如果只是统计字符出现频率,直接用标准库的Counter一步到位:
from collections import Counter Input = 'google.com' all_freq = Counter(Input)
你看到的“[未闭合”报错是Python解析器因语法错误产生的误报——它无法识别推导式里的赋值语句,导致解析失败,所以错误提示指向了错误的位置。
内容的提问来源于stack exchange,提问作者Sangita Paul
相关产品推荐
相关产品推荐

