我想把这两行代码合二为一。
for n in exceptions:
my_dict[n] += 1
一个增加字典的小语句需要两行,这让我很困扰。我敢肯定,这个问题也曾困扰过某人。
我想把这两行代码合二为一。
for n in exceptions:
my_dict[n] += 1
一个增加字典的小语句需要两行,这让我很困扰。我敢肯定,这个问题也曾困扰过某人。
for n in exceptions: my_dict[n] += 1
...但是该语句采用两行这一事实并没有错。有一些 Python编码指南 (PEP8),它们强烈鼓励核心可读性。通过将这些语句放在一行中,您会降低可读性。
从PEP8:
虽然有时可以将带有小主体的 if/for/while 放在同一行,但切勿对多子句语句执行此操作。还要避免折叠这么长的线!
my_dict.update({n: my_dict[n] + 1 for n in exceptions})
这实质上是使用dict.update用另一个字典中的值更新字典。另一个字典是使用字典理解构建的。不幸的是,为了获得my_dict[n] += 1
效果,我们必须在表达式中再次显式地读取值。
但是,如果它比为此使用简单明了的 for 循环更好,我会争论很多。
另一方面,由于您似乎只是在计算异常,您可能需要考虑为您的字典使用计数器。它本质上是一个改进的字典(意味着您可以像使用普通字典一样使用它),但它具有一些功能,使其在计算事物时非常完美。例如,您可以将上述语句简化为:
my_dict.update({n: 1 for n in exceptions})
或者当您只是1
为每个添加时,您可以直接传递 iterable exceptions
:
my_dict.update(exceptions)
这也将具有my_dict
自动初始化尚不存在的异常的好处。要从现有字典创建 Counter,只需将原始字典传递给 Counter 构造函数:
from collections import Counter
my_dict = Counter(my_dict)
import collections
my_dict = collections.Counter(exceptions)
或者,如果my_dict
已经定义为 a dict
,
my_dict = collections.Counter(my_dict)
my_dict.update(exceptions)