さて、次はディクショナリなるものを学ぼうと思う。
最終目標
- ディクショナリとはなんぞや
- ディクショナリに対する基本的操作を覚える
ディクショナリとは
簡単に言えば、「連想配列」とか「ハッシュ」といわれているもの。
Pythonのビルトインオブジェクトの中で最も柔軟性に富んだもので、リストとは違って要素を順不同で保持している。また、リフトでは添え字によってアクセスしていたが、ディクショナリでは「キー」によってアクセスする。
基本的操作
ディクショナリに対する基本的操作を以下に記す。
操作・演算 | 説明 |
---|---|
D1 = {} | 空のディクショナリを生成 |
D2 = {'spam' : 2, 'eggs' : 3} | 要素二つのディクショナリの生成 |
D3 = {'food' : {'ham' : 1, 'eggs' : 2}} | ネスト |
D2['eggs'] | キーによるインデクシング |
D2.has_key('eggs') 'eggs' in D2 D2.keys() D2.values() D2.copy() 等 | ディクショナリのメソッド |
len(D1) | 長さ(要素数)取得 |
D2[key] = 42 del D2[key] | 要素の追加・変更・削除 |
D4 = dict(zip(keyslist, valslist)) | ディクショナリの作成 |
とりあえずやってみる。
ディクショナリ生成から。
>>> d2 = {'spam' : 2, 'ham' : 1, 'eggs' : 3}
>>> d2['spam']
2
ふむ。注意点としては、読み出すときには"{}"じゃなくて"[]"を使用するということ。
そして、
>>> d2
{'eggs': 3, 'ham': 1, 'spam': 2}
生成したときと違う順番で表示された。つまりこれが順不同?順番は不定。
で、長さを取得してみる。
>>> len(d2)
3
リストと同じ操作で取得できる。覚えるのが楽。
次は検索をやってみる。
>>> d2.has_key('ham')
True
>>> d2.has_key('aaa')
False
>>> 'spam' in d2
True
>>> 'aaa' in d2
False
これも楽勝。
キー一覧を取得。
>>> d2.keys()
['eggs', 'ham', 'spam']
どっかによくあるkeysメソッド。
値一覧取得。
>>> d2.values()
[3, 1, 2]
これもどっかによくあるvaluesメソッド。
多分、keysで取得したデータの順番はvaluesで取得したデータの順番と
同じではない、と思っていた方が後々はまらずに済みそうだ。
次は追加と削除。
>>> del d2['spam']
>>> d2
{'eggs': 3, 'ham': 1}
>>> d2['brunch'] = 'Bacon'
>>> d2
{'eggs': 3, 'brunch': 'Bacon', 'ham': 1}
問題なし。
getメソッドを使用すれば値が存在しない要素にアクセスした場合にデフォルト値を返すようにすることができる。
>>> d2.get('spam',10)
10
>>> d2.get('ham',20)
1
d2.get('spam',10)では先ほど削除した要素なので、デフォルト値10が返されている。
updateメソッドを使用すれば2つのディクショナリをマージすることができる。
重複したキーがある場合、updateメソッドのパラメータで渡されたディクショナリの方の値に上書きされる。
>>> d2
{'eggs': 3, 'brunch': 'Bacon', 'ham': 1}
>>> d3 = {'toast':4, 'muffin':5,'brunch': 6}
>>> d2.update(d3)
>>> d2
{'toast': 4, 'ham': 1, 'muffin': 5, 'eggs': 3, 'brunch': 6}
>>>
まとめ
特徴は以下のとおり。
- キーによって要素にアクセスする。
- 要素は順不同で保持。
- 長さ変更自由
- ネスト可(リストもそうだった。。)
- 「写像」というカテゴリに属している
- 存在しない要素に代入すると新たに要素が作成される
- キーは文字列じゃなくてもよい
注意点としては、リストと混同しないようにすることと代入すると新しい要素が作られる
ということと順不同ということか。
.
0 コメント:
コメントを投稿