【发布时间】:2011-05-29 14:14:09
【问题描述】:
我有一个关于习语和可读性的问题,对于这种特殊情况,Python 哲学似乎存在冲突:
我想从字典 B 构建字典 A。如果 B 中不存在特定键,则什么都不做并继续。
哪种方式更好?
try:
A["blah"] = B["blah"]
except KeyError:
pass
或
if "blah" in B:
A["blah"] = B["blah"]
“做事并请求原谅”与“简单明了”。
哪个更好,为什么?
【问题讨论】:
-
第二个例子最好写成
if "blah" in B.keys()或if B.has_key("blah")。 -
A.update(B)不适合你吗? -
@Luke:
has_key已被弃用,取而代之的是in并且检查B.keys()会将 O(1) 操作更改为 O(n) 操作。 -
@Luke:不是这样。
.has_key已弃用,keys在 py2k 中创建不需要的列表,在 py3k 中是多余的 -
'build' A,例如,A 一开始是空的?我们只想要某些键?使用理解:
A = dict((k, v) for (k, v) in B if we_want_to_include(k)).
标签: python idioms readability defaultdict code-readability