2-4.辞書型を学ぼう
Pythonで文字列や数値を格納するものの主な形態として、前節のリスト[ ]やタプル( )、そして辞書と呼ばれるものがあります。これはリストとは異なり、データのラベルを呼び出しのキーワードとするものです。ここでは、その使い方を見て行きましょう。辞書型の基本構造は以下の通りです
>>> Dic = {key1:value1,key2:value2}
このように呼び出しのキーワードとなるKeyとそのデータであるvalueによって辞書は構成されています。ここから特定のvalueを呼び出したければ、
>>> Dic[key1]
とします。リストでは左から数えた順番0,1,2,...が呼び出しのキーになっていましたが、ここではkeyが呼び出しのキーとなります。より具体的に示すと、
>>> Dic = {“Tokyo”:”Japan”,”Los Angels”:”USA”}
>>> Dic[“Los Angels”]
USA
という形で使うことが出来ます。
さて、辞書に入れるデータがたくさんある時にはどのように登録すれば良いでしょうか?
これにはいくつか方法があります。まず、以下のようなkeyとvalueのデータがあったとしましょう。
これにはいくつか方法があります。まず、以下のようなkeyとvalueのデータがあったとしましょう。
>>> Key = [“Tokyo”,”Los Angels”, “Moscow”, “Seoul”] >>> value = [“Japan”,”USA”,”Russia”,”Korea”]
ここから辞書を作るにはいくつかの方法があります。
For文で登録
>>> Dic = {}
>>> for k,v in zip(key,value): Dic[k] = v
辞書内包表記で登録
>>> Dic = {}
>>> {k:v for k,v in zip(key,value)}
dict & zipで一括路登録
>>> zipped = zip(key,value) >>> Dic = dict(zipped)
これらによっていずれも同じ辞書を一括して作成できます。速度的には辞書内包表記かdict & zipがおすすめです。ちなみにvalueには辞書やリストを保存することが可能です。
>>> dic = {1:[34,45,2,56],2:[34,24,5,95]}
>>> dic[1][2]
2
>>> dic[2][0]
34
このような比較的長い辞書をprintする時には少々面倒なことが起こります。以下の例は、乱数試行ですので人によって結果は変わります。
>>>from random import randint
>>>dic = {i:randint(0,100) for i in range(100)}
dic
{0: 15, 1: 33, 2: 68, 3: 49, 4: 52, 5: 80, 6: 7, 7: 10, 8: 1, 9: 61, 10: 80, 11: 94, 12: 23, 13: 46, 14: 55, 15: 5, 16: 46, 17: 21, 18: 68, 19: 42, 20: 20, 21: 35, 22: 17, 23: 69, 24: 40, 25: 56, 26: 47, 27: 50, 28: 81, 29: 65, 30: 7, 31: 47, 32: 51, 33: 71, 34: 100, 35: 54, 36: 38, 37: 73, 38: 89, 39: 58, 40: 13, 41: 59, 42: 83, 43: 23, 44: 68, 45: 36, 46: 98, 47: 28, 48: 95, 49: 13, 50: 15, 51: 30, 52: 31, 53: 10, 54: 18, 55: 68, 56: 8, 57: 91, 58: 14, 59: 20, 60: 74, 61: 59, 62: 99, 63: 94, 64: 62, 65: 47, 66: 48, 67: 47, 68: 96, 69: 33, 70: 41, 71: 25, 72: 59, 73: 92, 74: 76, 75: 61, 76: 70, 77: 39, 78: 27, 79: 88, 80: 52, 81: 71, 82: 28, 83: 52, 84: 72, 85: 73, 86: 72, 87: 84, 88: 87, 89: 26, 90: 92, 91: 25, 92: 12, 93: 85, 94: 55, 95: 52, 96: 25, 97: 20, 98: 71, 99: 7}
これでは一体何がN番目のkeyでn番目のvalueだか検討もつきません。そういう時はpprintを使います。
pprint.pprint( )
辞書などの長いリストや辞書をを見やすい形でprintします
辞書などの長いリストや辞書をを見やすい形でprintします
これを使ってprintすると以下のようになります
>>> from pprint import pprint
>>> pprint(dic)
{0: 15,
1: 33,
2: 68,
...
99: 7}
ちなみに辞書専用の関数としてkeys()とvalues()があり、それぞれkeyとvalueのリストを辞書から返してくれます
>>> dic = {0:”Tokyo”,1:”USA”,2:”Russia”}
>>> keys(dic)
[0,1,2]
>>> values(dic)
[“Tokyo”,”USA”,”Russia”]