我想把这两行代码合二为一。
for n in exceptions:
my_dict[n] += 1
令我困扰的是,增加字典的小语句需要两行。我确信这个问题也困扰了某些人。
答案 0 :(得分:3)
for n in exceptions: my_dict[n] += 1
...但是没有错误,因为该语句需要两行。有一些python coding guidelines (PEP8),他们强烈鼓励核心可读性。通过将这些语句放在一行中,可以降低可读性。
来自PEP8:
虽然有时可以在小身体上放置if / for / while 同一行,永远不要为多子句语句执行此操作。还要避免 折叠如此长的线条!
答案 1 :(得分:3)
my_dict.update({n: my_dict[n] + 1 for n in exceptions})
这主要使用dict.update来使用另一个字典中的值更新字典。而另一个字典是使用字典理解构建的。不幸的是,要获得my_dict[n] += 1
效果,我们必须在表达式中再次明确地读取该值。
但是,如果它比使用简单和清除 for循环更好,那么我会认为很多。
另一方面,由于您似乎只计算异常,因此您可能需要考虑使用Counter作为字典。它本质上是一个改进的字典(意思是你可以像普通字典一样使用它),但它带有一些功能,使它在计算事物时非常完美。例如,您可以将上述语句简化为:
my_dict.update({n: 1 for n in exceptions})
或者您只是为每个添加1
,您可以直接传递可迭代的exceptions
:
my_dict.update(exceptions)
这样做的好处是,my_dict
中不存在的异常会自动初始化。要从现有字典创建计数器,只需将原始字典传递给Counter构造函数:
from collections import Counter
my_dict = Counter(my_dict)
答案 2 :(得分:2)
import collections
my_dict = collections.Counter(exceptions)
或者,如果已将my_dict
定义为dict
,
my_dict = collections.Counter(my_dict)
my_dict.update(exceptions)