Pythonクックブック(4章)
ディクショナリの操作(作成、検索、追加)
ディクショナリの作成は、dict()を使うことで、keyとvalueのシーケンスから行える。
おかげで、{'key':'value'}の構文を使用しなくても済む。
また、存在しないキーに対する検索でもKeyError例外を出さないようにするには、get()メソッドが便利。
存在しなければ決まった文字列を返すように出来ている。
追加はsetdefaultメソッドが便利。get同様に検索用に使うが、キーが存在しなければ初期値を設定できる。
>>> colors = ['red', 'green', 'blue'] >>> values = [(255, 0, 0), (0, 255, 0), (0, 0, 255)] # zip()で色とRGBパラメータのシーケンスを生成し、ディクショナリを作成 >>> rgb_dict = dict(zip(colors, values)) >>> rgb_dict {'blue': (0, 0, 255), 'green': (0, 255, 0), 'red': (255, 0, 0)} # 存在しないキーには初期値を設定し、設定した値を返す >>> rgb_dict.setdefault('black', (0, 0, 0)) (0, 0, 0) >>> rgb_dict.setdefault('white', (255, 255, 255)) (255, 255, 255) >>> rgb_dict {'blue': (0, 0, 255), 'black': (0, 0, 0), 'white': (255, 255, 255), 'green': (0, 255, 0), 'red': (255, 0, 0)} >>> rgb_dict.setdefault('yellow', (255, 255, 0)) (255, 255, 0) >>> rgb_dict {'blue': (0, 0, 255), 'yellow': (255, 255, 0), 'black': (0, 0, 0), 'green': (0, 255, 0), 'white': (255, 255, 255), 'red': (255, 0, 0)} # 存在するキーの値は変更されない(既存の値が返される) >>> rgb_dict.setdefault('black', (1, 1, 1)) (0, 0, 0) >>> rgb_dict {'blue': (0, 0, 255), 'yellow': (255, 255, 0), 'green': (0, 255, 0), 'black': (0, 0, 0), 'white': (255, 255, 255), 'red': (255, 0, 0)} # 存在するキーには値を返す >>> rgb_dict.get('yellow', 'not_found') (255, 255, 0) # 存在しないキーには、決められた値('not found')を返す >>> rgb_dict.get('purple', 'not_found') 'not_found' >>>
getに似たpopというメソッドがあるが、こちらは文字通り値を検索してポップしてくれる。
ただ、setdefaultはハッシュテーブルなど、値が増えていくデータ構造をディクショナリで実現するときにこそ使うべき。
>>> hash_table = {} >>> hash_table {} >>> hash_table.setdefault(1, []).append('egg') >>> hash_table.setdefault(1, []).append('spam') >>> hash_table.setdefault(2, []).append('bike') >>> hash_table.setdefault(2, []).append('car') >>> hash_table.setdefault(2, []).append('train') >>> hash_table.setdefault(3, []).append('pc') >>> hash_table.setdefault(3, []).append('printer') >>> hash_table {1: ['egg', 'spam'], 2: ['bike', 'car', 'train'], 3: ['pc', 'printer']} >>>
修正@07/18
実行結果は正しく行っているが、本文が正しくなかった。
(誤)
ディクショナリの作成は、dict()を使うことで、keyとvalueのシーケンスから行える。
(正)
ディクショナリの作成は、zip()/dict()を使うことで、keyとvalueのシーケンスから行える。
- 作者: Alex Martelli,Anna Martelli Ravenscroft,David Ascher,鴨澤眞夫,當山仁健,吉田聡,吉宗貞紀
- 出版社/メーカー: オライリー・ジャパン
- 発売日: 2007/06/26
- メディア: 大型本
- 購入: 11人 クリック: 423回
- この商品を含むブログ (85件) を見る