辞書と文字列型
pythonの辞書について.
辞書のkeyにできるものって,str型,unicode型,int型,float型,boolean型がいけるくさい.確認したところによると.
dic = {} dic["ほげ"] = 1 dic[u"ほげ"] = 2 dic["3"] = 3 dic[3] = 4 dic[False] = 5 print dic {False: 5, '\xe3\x81\xbb\xe3\x81\x92': 1, '3': 3, 3: 4, u'\u307b\u3052': 2}
おお,全部明確に区別するんだね.
こちらの方がかいていらっしゃいますが,
Pythonではキーの型は、辞書オブジェクト全体で同じ型である必要がありません。
キーはPython内部で「型と値から生成されるオブジェクトハッシュコード」で管理されるようです。
ただし、キーに使えるオブジェクトはイミュータブル(変更不能)オブジェクトでなくてはなりません。(文字列やタプル、数値など)
ほうほう,そういうことなのね.
Javaだと,
ハッシュテーブルにオブジェクトを格納したり、そこから取り出したりするには、キーとして使用するオブジェクトに、hashCode メソッドと equals メソッドが実装されていなければなりません。*1
となっている.まぁそのへんはkeyにするObjectによるんだろ.
あんま知らん.String型くらいしか入れた事無いから...^^^^
javascriptだと,文字列でも数値にキャスト可能なら数値でkeyを取得可能なんだよね.
a = {}; a[3] = 4; a["3"] = 5; alert (a[3]); // -> 5
こうみてくると,pythonはどちらかというと型にウルサい言語な気がする.
違いに慣れねば...