1. ホーム
  2. python

[解決済み] なぜリストには辞書のような安全なgetメソッドがないのですか?

2022-03-16 01:32:30

質問

なぜlistにはdictionaryのような安全なquot;get"メソッドがないのでしょうか?

>>> 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 メソッドは dict は連想配列のコレクションで (値は名前に関連付けられます)、 キーが存在するかどうかを例外を発生させずにチェックする (そしてその値を返す) ことは非効率的です。 len メソッドは非常に高速です)。 そのため .get メソッドでは、辞書の37番目の項目に直接アクセスするのではなく、名前に関連付けられた値を問い合わせることができます (これは、あなたがリストに求めていることに近いと思います)。

もちろん、自分で簡単に実装することができます。

def safe_list_get (l, idx, default):
  try:
    return l[idx]
  except IndexError:
    return default

にモンキーパッチすることもできます。 __builtins__.list のコンストラクタを使用します。 __main__ しかし、ほとんどのコードで使われていないため、この変更はあまり一般的ではありません。 もし、自分のコードで作成したリストに対してこの機能を使いたいだけなら、単に list を追加し、さらに get メソッドを使用します。