ruby、pythonのハッシュ/辞書の値取得
rubyにばかり慣れていたので、pythonの辞書から値を取得しようとして、キーがない場合にErrorになることに、ちょっとだけとまどいました。
せっかくなのでハッシュ/辞書の扱い方のメモを残しておきます。
python
my_dict = {"a": 1, "b": 2}
# 値の取得
print(my_dict["a"])
# => 1
# キーがない場合、KeyErrorが発生する
try:
print(my_dict["c"])
except:
print("KeyError")
# => KeyError
# あらかじめkeyがあるか調べるにはhas_key
if my_dict.has_key("c"):
print(my_dict["c"])
# getではkeyがなくてもエラーにならない
print(my_dict.get("c"))
# => None
# デフォルト値を渡すこともできる
print(my_dict.get("c",'nothing'))
# => nothing
ruby
my_dict = {"a" => 1, "b" => 2}
# 値の取得
print(my_dict["a"])
# => 1
# キーがない場合、nilが返される
print(my_dict["c"])
# => nil
# あらかじめkeyがあるか調べるにはhas_key?
if my_dict.has_key?("c")
print(my_dict["c"])
end
# fetchではkeyがないとエラーになる
begin
print(my_dict.fetch("c"))
rescue KeyError => e
print "KeyError"
end
# => KeyError
# デフォルト値を渡すこともできる
print(my_dict.fetch("c",'nothing'))
# => nothing
| 用途 | ruby | python |
|---|---|---|
| 値の取得(キーがない場合エラー) | fetch(key) | [] |
| 値の取得(キーがない場合nil、None) | [] | get(key) |
| 値の取得(キーがない場合のためのデフォルト値を渡す) | fetch(key, default=nil) | get(key, default=None) |
| 値の有無を調べる | has_key?(key) | has_key(key) |