ざっくりん雑記

プログラミングで忘れそうなことをひたすらメモる

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

結果

[]

辞書自体は消されずに、空っぽの辞書オブジェクトが残るみたい。なんか儚い。

辞書型のメソッドはだいたい網羅した。