ディクショナリ
ディクショナリ(dict)とは、他の言語でいうところの連想配列やハッシュと同じ機能を提供する。最近流行しているKey-Value型のデータストアもディクショナリの一種であるといえる。
辞書の作成
中括弧で囲んだ中に、Key:Valueをカンマで区切って並べる。Keyは文字列が一般的であるが、数字や、オブジェクトも設定できる。Valueもすべての種類のオブジェクトが指定できる。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#文字列キー
>>> dictA = {"a":"apple", "b":"blue", "c":"chocolate"}
>>> dictA{'a': 'apple', 'c': 'chocolate', 'b': 'blue'}
>>> dictA["b"]
'blue'#整数キー
>>> dictB = {1:"foo", 2:"bar", 3:"baz"}
>>> dictB
{1: 'foo', 2: 'bar', 3: 'baz'}
>>> dictB[1]
'foo'
#タプルキー
>>> dictC = {(0,0):"point A", (0,1):"point B", (1,0): "point C"}
>>> dictC
{(0, 1): 'point B', (1, 0): 'point C', (0, 0): 'point A'}
>>> dictC[(0,0)]
'point A'
リスト(タプル)で辞書を作成
1
2
>>> dict([[1,"one"],[2,"twp"],[3,"three"]])
{1: 'one', 2: 'twp', 3: 'three'}
キーワード引数で作成
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #文字列キー >>> dictA = {"a":"apple", "b":"blue", "c":"chocolate"} >>> dictA{'a': 'apple', 'c': 'chocolate', 'b': 'blue'} >>> dictA["b"] 'blue'#整数キー >>> dictB = {1:"foo", 2:"bar", 3:"baz"} >>> dictB {1: 'foo', 2: 'bar', 3: 'baz'} >>> dictB[1] 'foo' #タプルキー >>> dictC = {(0,0):"point A", (0,1):"point B", (1,0): "point C"} >>> dictC {(0, 1): 'point B', (1, 0): 'point C', (0, 0): 'point A'} >>> dictC[(0,0)] 'point A' |
リスト(タプル)で辞書を作成
1 2 | >>> dict([[1,"one"],[2,"twp"],[3,"three"]]) {1: 'one', 2: 'twp', 3: 'three'} |
キーワード引数で作成
この方法は、キーが文字列の場合しか使えないので注意。
1 2 | >>> dict(x=1,y=2) {'y': 2, 'x': 1} |
2つのリスト(タプル)から辞書を作成
1 2 3 4 5 6 | >>> numbers = [1,2,3,4,5] >>> words = ["one","two","three","four","five"] >>> zip(numbers,words) [(1, 'one'), (2, 'two'), (3, 'three'), (4, 'four'), (5, 'five')] >>> dict(zip(numbers,words)) {1: 'one', 2: 'two', 3: 'three', 4: 'four', 5: 'five'} |
KeyとValueを取り出す
それぞれkeysメソッド、valuesメソッドで取得できる。
1 2 3 4 5 6 | >>> dictA {'a': 'apple', 'c': 'chocolate', 'b': 'blue'} >>> dictA.keys() ['a', 'c', 'b'] >>> dictA.values() ['apple', 'chocolate', 'blue'] |
要素数の確認
listと同様にlen関数で要素数を確認できる。
1 2 | >>> len(dictA) 3 |
キーの存在確認
inでキーの存在有無を確認できる。
1 2 3 4 5 6 | >>> dictA {'a': 'apple', 'c': 'chocolate', 'b': 'blue'} >>> 'a' in dictA True >>> 'd' in dictA False |
辞書を複製
中身が同じ辞書を作る。
1 2 3 4 5 6 7 | >>> dictD = dict(dictA) >>> dictD {'a': 'apple', 'c': 'chocolate', 'b': 'blue'} >>> dictD == dictA True #値は同じ >>> dictD is dictA False #オブジェクトは違う |
ループ
すべての要素に対して処理を実行。
1 2 3 4 5 6 | >>> for key in dictA: ... key, dictA[key] ... ('a', 'apple') ('c', 'chocolate') ('b', 'blue') |
辞書を結合
updateメソッドの引数で指定した側の辞書が優先される。
1 2 3 4 5 6 7 8 9 10 11 12 13 | >>> dictA {'a': 'apple', 'c': 'chocolate', 'b': 'blue'} >>> dictB {1: 'foo', 2: 'bar', 3: 'baz'} >>> dictA.update(dictB) >>> dictA #重複キーが存在しなかったので、単純に追加されました {'a': 'apple', 1: 'foo', 'c': 'chocolate', 'b': 'blue', 3: 'baz', 2: 'bar'} >>> dictA.update({"c":"color"}) >>> dictA #すでに存在するキー"c"をupdateしたので、上書きされました。 {'a': 'apple', 1: 'foo', 'c': 'color', 'b': 'blue', 3: 'baz', 2: 'bar'} >>> dictA.update(b="black") #キーが文字列の場合だけ、このように記述できます。 >>> dictA {'a': 'apple', 1: 'foo', 'c': 'color', 'b': 'black', 3: 'baz', 2: 'bar'} |