【问题标题】:Python: check for a KeyError in a list comprehension?Python:检查列表理解中的 KeyError?
【发布时间】:2014-06-17 19:21:01
【问题描述】:

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

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

【问题讨论】:

    标签: python dictionary list-comprehension


    【解决方案1】:

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

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

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

    for i in mydict['entries']:
        if mydict['entries']:
    

    如果entries 抛出KeyError,这没什么用。

    【讨论】:

      【解决方案2】:

      你可以试试这个代码:

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

      【讨论】:

        【解决方案3】:

        你想要这样的东西:

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

        【讨论】:

          【解决方案4】:

          还有另一种方法可以做到这一点,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'}
          >>>  
          

          【讨论】:

            猜你喜欢
            • 2017-10-23
            • 1970-01-01
            • 1970-01-01
            • 2021-09-01
            • 2018-02-07
            • 2020-12-03
            • 2018-08-13
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多