辞書 Dictionaries
リストを使えば、インデックスと要素の内容を覚えておけば要素を取り出せるものであった。
>>> list = [1, 2, 'python', 'yeah']
>>> list[0]
1
>>>
逆に言えば、インデックスと要素の内容を覚えていないと面倒だという事。
そこで、要素ごとに情報の性質や種類が異なっているデータは、インデックスで管理するより見出しで管理する方が便利なので、要素にラベルをつける方法がある。これをディクショナリ機能という。書き方は、{キー1: 値1, キー2: 値2, ...}といった具合。このキーがラベルにあたる。
>>> dictionary = {'name': 0, 'name1': 1, 'name2': 2}
>>> dictionary['name1']
1
>>> dictionary['name2']
2
>>>
要素の変更、追加、削除はリストとほぼ同じなので省略。
違うのはインデックスの部分がキーになる事くらい。
リストのようにこのようにしてディクショナリを作ることもできる。
>>> {x: x*x for x in range(3,6)}
{3: 9, 4: 16, 5: 25}
リストだとこうなる。基本的にラベルがあるかないかの違い。リストはキー(ラベル)の代わりにインデックス。
>>> [x*x for x in range(3,6)]
[9, 16, 25]
以下のようにすると、一番小さいキー(ラベル)を取り出す。
>>> min({-1: 6, 0: 5, 1: 4})
-1
まずキーをそれぞれ2乗し、最小値を取る。
>>> min({-1: 6, 0: 5, 1: 4}, key=lambda x: x*x)
0
ちなみにリストの時はこんな感じ。
まずkey=lambda x: x[1]でインデックス1番目の3、2、1を取り出す。
次にその3つの数値のうち最小値を取る(1)。
この最小値が含まれているリストは[2, 1]である。
>>> min([[0, 3], [1, 2], [2, 1]], key=lambda x: x[1])
[2, 1]
>>>
以上はキー(:の左側)を比較した場合。
次に、キーの値(:の右側)の比較をする場合。
get()を使うことで、ディクショナリのキーの値を渡すことができる。
具体的にコードに書くとこんな感じ。
def key_of_min_value(d):
"""Returns the key in a dict d that corresponds to the minimum value of d.
>>> letters = {'a': 6, 'b': 5, 'c': 4, 'd': 5}
>>> min(letters)
'a'
>>> key_of_min_value(letters)
'c'
"""
return min(d, key=d.get)