Python:检查列表推导中的KeyError?

时间:2014-05-01 10:01:53

标签: python dictionary list-comprehension

如果entries中不存在mydict,我是否可以在一行中编写以下内容而不会导致KeyError?

b = [i for i in mydict['entries'] if mydict['entries']]

4 个答案:

答案 0 :(得分:5)

如果密钥丢失,您可以使用dict.get()默认为空列表:

b = [i for i in mydict.get('entries', [])]

在您的版本中,if过滤器仅适用于每次迭代,就像您在if循环下嵌套for语句一样:

for i in mydict['entries']:
    if mydict['entries']:
如果entries抛出KeyError

就没用了。

答案 1 :(得分:2)

您可以尝试以下代码:

b = [i for i in mydict.get('entries', [])]

答案 2 :(得分:1)

你想要这样的东西:

b = [i for i in mydict.get('entries', [])]

答案 3 :(得分:0)

还有另一种方法,Dict.setdefault

>>> d = {}
>>> import time
>>> time.ctime(
... )
'Thu May  1 18:11:53 2014'
>>> d = {}
>>> a = d.setdefault('time',time.ctime())
>>> a
'Thu May  1 18:12:17 2014'
>>> d
{'time': 'Thu May  1 18:12:17 2014'}
>>>