Python - 辞書(ディクショナリ)の使い方
Pythonの辞書型オブジェクト
辞書型のオブジェクトの作り方は次のような感じ。
(キー1:値1, キー2:値2, ...)
辞書型は要素間に順序を持たないので、格納した順番に出力されません。キーを使って各要素を識別します。
# --- coding: utf-8 --- dictTest = {"oneKey":1, "twoKey":2, "threeKey":3} print dictTest
実行
{'threeKey': 3, 'twoKey': 2, 'oneKey': 1}
出力結果を見ると、順序が保たれていないことがわかります。
キーや値を取得する方法
辞書オブジェクトから
- keyの一覧取得
- valueの一覧取得
- key,valueの一覧取得
を行ってみる
# --- coding: utf-8 --- price = {'apple': 120, 'orange': 150, 'banana': 180} # keyの一覧取得 print price.keys() # valueの一覧取得 print price.values() # keyとvalueの一覧取得 print price.items()
結果
['orange', 'apple', 'banana'] [150, 120, 180] [('orange', 150), ('apple', 120), ('banana', 180)]
ループで辞書オブジェクトを出力する方法
for文で辞書の要素と値を出力してみます。
# --- coding: utf-8 --- price = {'apple': 120, 'orange': 150, 'banana': 180} # forループでkeyとvalueを取得 for key, value in price.iteritems(): print "key: %s,\t value:%d" %(key, value) # keyのみを取得 for key in price.iterkeys(): print "key: %s" %(key) # valueのみを取得 for value in price.itervalues(): print "value: %s" %(value)
結果
key: orange, value:150 key: apple, value:120 key: banana, value:180 key: orange key: apple key: banana value: 150 value: 120 value: 180
繰り返しになりますが、まとめてみるとこんな感じ。
- .items() : すべてのキーと値を2つのタプルのリストで取得
- .keys() : すべてのキーをリストで取得
- .values() : すべての値をリストで取得
値の変更と辞書オブジェクトの長さを取得する方法
値の変更
# --- coding: utf-8 --- price = {'apple': 120, 'orange': 150, 'banana': 180} # price辞書のappleの値を120→130へ変更 price['apple'] = 130 print u"値:%d" %(price['apple'])
結果
値:130
辞書オブジェクトの長さの取得
# --- coding: utf-8 --- price = {'apple': 120, 'orange': 150, 'banana': 180} # len関数を使用し辞書の現在持っている要素数(key数)を取得 print u"要素数:%s" % str(len(price))
結果
要素数:3
新しい要素を既存の辞書オブジェクトに追加する方法
追加
辞書名[追加したい要素のkey] = value
# --- coding: utf-8 --- price = {'apple': 120, 'orange': 150, 'banana': 180} # price辞書に key:kiwi,value=50 を追加 price['kiwi'] = 50 for key, value in price.iteritems(): print "key: %s,\t value:%d" %(key, value)
結果
key: orange, value:150 key: kiwi, value:50 key: apple, value:120 key: banana, value:180
kiwiが問題なく追加されています。
2つの辞書オブジェクトを連結(合体)させる方法
辞書オブジェクトに他の辞書を連結させることが可能です。
updateメソッドを使います。
辞書オブジェクト.update(新しく連結させたい辞書オブジェクト)
# --- coding: utf-8 --- price = {'apple': 120, 'orange': 150, 'banana': 180} # priceに連結させたい辞書オブジェクト price2 = {'grape': 300, 'melon': 500, 'peach': 200} price.update(price2) for key, value in price.iteritems(): print "key: %s,\t value:%d" %(key, value)
結果
key: melon, value:500 key: grape, value:300 key: apple, value:120 key: peach, value:200 key: orange, value:150 key: banana, value:180
注意点としては、連結させる辞書オブジェクトの要素が既存の辞書オブジェクトに既に存在する場合、追加ではなく値を上書きされます。
# --- coding: utf-8 --- price = {'apple': 120, 'orange': 150, 'banana': 180} # update前のprice for key, value in price.iteritems(): print "key: %s,\t value:%d" %(key, value) # priceに連結させたい辞書オブジェクト price2 = {'apple': 9999} price.update(price2) print "[Update Complete]" # update後のprice for key, value in price.iteritems(): print "key: %s,\t value:%d" %(key, value)
結果
key: orange, value:150 key: apple, value:120 key: banana, value:180 [Update Complete] key: orange, value:150 key: apple, value:9999 key: banana, value:180
price2のappleが追加ではなく、上書きされているのがわかります。
要素を削除する方法
基本的な要素の削除
del オブジェクト[要素名]
# --- coding: utf-8 --- price = {'apple': 120, 'orange': 150, 'banana': 180} # banana を削除 del price['banana'] for key, value in price.iteritems(): print "key: %s,\t value:%d" %(key, value)
結果
key: orange, value:150 key: apple, value:120
banana要素が消えているのがわかります。
popメソッドを使ったキーの削除の方法
辞書オブジェクト.pop(要素名[,要素名2])
delメソッドと何が違うのかというと、 例えば、第1引数に削除したい要素を指定したけど、辞書オブジェクトにその要素が存在しなかったよー!って場合、 第2引数にその場合にnoneを指定してやれば、noneを返してくれる。
# --- coding: utf-8 --- price = {'apple': 120, 'orange': 150, 'banana': 180} value = price.pop('peach', None) print u"削除された要素の値:" + str(value)
結果
削除された要素の値:None
いまいち、何に使うのか分からんけど…。
辞書の中身をオールクリア
clearメソッドを使えば全ての要素を削除できます。
辞書オブジェクト.clear()
# --- coding: utf-8 --- price = {'apple': 120, 'orange': 150, 'banana': 180} price.clear() print price
結果
[]
辞書自体は消されずに、空っぽの辞書オブジェクトが残るみたい。なんか儚い。
辞書型のメソッドはだいたい網羅した。