1. マップ型を実装した辞書
Python において、ハッシュに相当するものはマップ型と呼ばれる。
2.3.8 マップ型 によると、
現在のところは標準のマップ型、dictionary だけです。
インターフェスがマップ型で、その実装が辞書。 ただし、Python ではインターフェイスと言わずに、プロトコルと呼ぶ。
2.3.8 マップ型に定義されているメソッドを適当に分類しておく。
最初にマップ型のオブジェクトを作成する。
# 辞書: key は変更不能でなければならない。
persons = {"Tarou" : 20,
"Hanako" : 15,
"Jiro" : 30}
2. 基本的な操作
# 要素の値をキーで取得
print persons['Hanako']
# 要素の追加
persons['Saburou'] = 40
print persons
# 要素を削除
del persons['Hanako']
print persons
# 要素の走査
for k,v in persons.iteritems():
print k, v
# 大きさ
print len(persons)
3. キーに対する操作
# キーの一覧を取得
print persons.keys()
# キーの存否を確認する
print persons.has_key('Jiro')
print persons.has_key('Tarosuke')
print 'Jiro' in persons
print 'Tarousuke' in persons
print 'Tarousuke' not in persons
4. 値を取得
# 値の一覧を取得 print persons.values()
5. イテレータ系
# iteritems() に加えて... print [person for person in persons.iterkeys()] print [person for person in persons.itervalues()]
6. 基本操作の拡張
# --- 要素の取得
# 要素がない場合、KeyError が投げられる
#print persons['Hana']
# キーがないとき、None が返される
print persons.get('Hana')
# キーがないときに返される値を指定
print persons.get('Hana', u"Hana さんはいません")
# 以下と同じ
if not persons.get('Hana'):
print u"Hana さんはいません"
else:
print person['Hana']
# --- なければ登録
# get との違いは、キーがない場合、辞書に登録
persons.setdefault('Hana', 10)
print persons
# --- pop : 取り出して削除
print persons.pop('Jiro')
print persons
persons['Jiro'] = 30
# 任意のペアを取り出す
print persons.popitem()
# --- 要素の更新・追加
# 更新
persons.update({'Hana':100})
print persons
# 追加
persons.update({'Funa' :200, 'Hoge': 300})
print persons
# type({}) -> だからこれを利用して
print dict.fromkeys([10,20,30,40], "hoge")
print dict.fromkeys('abcd', "piyo")
7. その他
# タプルのリストから辞書を生成する - リスト内包表記を使って nums = [1,2,3,4,5] print dict([(x, x+10) for x in nums]) # タプルのリスト cf. keys(), values() print persons.items() # 浅いコピー p2 = persons.copy() print p2 # 要素を全て削除 persons.clear() print persons
dict() は、関数電卓 (Python 版) の使い方が参考になる。
135: # 演算子の名前をキーにしてハッシュ表を作る 136: H_OP=dict([(str(op), op) for op in L_OP])
0コメント:
コメントを投稿