【发布时间】:2012-12-01 12:06:42
【问题描述】:
我有一些包含类似数据的字典。
大多数查询将在一个字典的一次搜索中得到解决。
那么,省略对字典中是否存在键的初步检查并尝试在except子句中捕获键错误的下一个字典是否更好?
或者类似的东西
# d1, d2, d3 = bunch of dictionaries
value = d1.get(key, d2.get(key, d3.get(key, 0)))
?
【问题讨论】:
-
试试看。 Python 有一个很棒的
timeit模块,它允许你比较什么是最好的、性能方面的。请注意,性能远不如可读性重要,除非它是一个已证明的瓶颈。以最清晰的方式编写它,然后在需要时进行优化。还值得注意的是,您的第一个方法(检查密钥是否存在)引入了潜在的竞争条件。 -
这实际上也取决于您的代码。如果字典中没有键是不好的,那么 try:except 更合乎逻辑,如果没有键是微不足道的,那么使用 get 和默认的
None,检查一个值是否在字典中不是你的事真的“需要”做,你应该总是知道你的字典里有什么,检查意味着你收到了一个未知的字典。 -
您的
dict.get字符串将查看密钥是否在d3、d2和d1中,因为要解析d1的方法调用,您需要知道传递给get的参数 -
你可以使用Chained map recipe,或者,在python 3.3上,新的
ChainMaptype。 -
FWIW 在我的简单测试中使用新发现的神奇时间,链式地图比 try:except 块更快。
标签: python dictionary