为什么list没有像字典那样安全的“get”方法?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (18)
>>> d = {'a':'b'}
>>> d['a']
'b'
>>> d['c']
KeyError: 'c'
>>> d.get('c', 'fail')
'fail'

>>> l = [1]
>>> l[10]
IndexError: list index out of range
提问于
用户回答回答于

最终它可能没有一个安全的.get方法,因为a dict是一个关联集合(值与名称相关联),在检查一个键是否存在(并返回它的值)而没有抛出异常的情况下效率低下,而它是超级平凡以避免异常访问列表元素(因为len方法非常快)。该.get方法允许查询与名称关联的值,而不是直接访问字典中的第37项(这更像是你要求列表的内容)。

可以很容易地实现这一点:

def safe_list_get (l, idx, default):
  try:
    return l[idx]
  except IndexError:
    return default
用户回答回答于

如果你想要第一个元素,这可以工作

>>> my_list = [1,2,3]
>>> next(iter(my_list), 'fail')
1
>>> my_list = []
>>> next(iter(my_list), 'fail')
'fail'

扫码关注云+社区