環境設定
プログラム作成
辞書
tkinter
|
Python辞書 (ディクショナリ)
辞書の使い方を説明します.
目次
はじめに
辞書とは
配列は整数でデータにアクセスしますが,辞書型 (ディクショナリー) はキー (通常は文字列) を指定することでデータにアクセスします.他のプログラミング言語のハッシュや連想配列と似ています.これはシーケンス型と同じく複数の要素から構成されます.しかし,シーケンス型と異なり要素間には順序はありません.コロンで分けたキーと値の組を波括弧で囲むこで,辞書型のオブジェクトが作成されます.
{キー1:値1, キー2:値2, キー3:値3, キー4:値4}
辞書オブジェクトに角括弧をつけキーを指定すると,値を取り出すことが出来ます.
辞書オブジェクト[キー]
単純な例
最も簡単な例を以下に示します.キーと値が文字列です.
辞書を使ったプログラム例 |
実行結果 |
animal = {'cat':'ねこ', 'dog':'いぬ', 'sheep':'ひつじ'}
print(animal['cat'])
print(animal['dog'])
print(animal['sheep'])
|
ねこ
いぬ
ひつじ
|
値について
ディクショナリ値には,どんな Python のオブジェクトも指定可能です.文字列や数値,シーケンスなどの標準なオブジェクト,インスタンスなどのユーザ定義オブジェクトを値にすることが可能です.
Python の辞書の様々な値の例 |
実行結果 |
class Hoge:
def prt(self):
return 'これはクラスのインスタンス'
if __name__ == '__main__':
def f(x):
return 2*x
inst = Hoge()
lst = [0, 3, 6, 9, 12, 15]
svar = '文字型の変数'
sub_dic = {'cat':'猫', 'dog':'犬', 'sheep':'羊'}
dic ={'ins':inst, 'func':f, 'list':lst, 'string': svar, 'dic':sub_dic}
print(dic['ins'].prt())
print(dic['func'](1111))
print(dic['list'][4])
print(dic['string'])
print(dic['dic']['cat'])
|
これはクラスのインスタンス
2222
12
文字型の変数
猫
|
キーについて
キーには文字列以外のオブジェクト,たたえば整数も使えます.もっと言えば,変更できないオブジェクト (イミュータブル) であれば,どれもキーになります.その例を以下に示します.
Python の辞書の様々な値の例 |
実行結果 |
class Hoge:
def prt(self):
return 'これはクラスのインスタンス'
if __name__ == '__main__':
def f(x):
return 2*x
dic ={'dog':'犬', 1:'one', 3.14:'pi',\
(2,4):'タプル', f:'関数', Hoge:'クラス'}
print(dic['dog'])
print(dic[1])
print(dic[3.14])
print(dic[(2,4)])
print(dic[f])
print(dic[Hoge])
|
犬
one
pi
タプル
関数
クラス
|
辞書のキーとなり得ないイミュータブルなオブジェクトには,list(リスト) と dict(辞書), set(集合), bytearray(バイトアレイ)が有ります.
辞書の作成
ここでは,辞書の代表的な使い方を示します.
リレラル
以下の例は,プログラム中で辞書オブジェクト作成し,変数に代入します.そして,キーを指定し値を取り出してます.この例から分かるように,整数のキーも使えます.実行結果は以下のとおりです.
リテラルを使った辞書作成の例 |
実行結果 |
# ----- 辞書の作成 -----
doraemon = {'name':'ドラえもん', 'birthday':'2012/9/3', \
'height':129.3,\
0:3.1415, 1:2.71828, 2:'のび太'}
# ----- 値の取り出し ---
print(doraemon['name'])
print(doraemon['birthday'])
print(doraemon['height'])
a=0
print(doraemon[a])
print(doraemon[a+1])
print(doraemon[a+2])
|
ドラえもん
2012/9/3
129.3
3.1415
2.71828
のび太
|
シーケンスから作成
タプルやリストなどのシーケンスを使うと,より洗練された辞書の作成が可能です.
シーケンスを使った辞書作成の例 |
実行結果 |
zip()関数を使い二つのシーケンスを接続します.これは,二つ以上のシーケンスの各々の要素で新たなシーケンスを作ります.要素数が異なる場合は,最も要素数の少ないシーケンスに合わされます.ここでは,最終的にはdict()で型変換します.
key = ('name', 'weight', 'height')
robo1 = ('ドラえもん', 129.3, 129.3)
robo2 = ('ドラミ', 100, 91)
doraemon = dict(zip(key, robo1))
dorami = dict(zip(key, robo2))
for k in key:
print('{0}: {1}\t{2}'.format(k, doraemon[k], dorami[k]))
|
name: ドラえもん ドラミ
weight: 129.3 100
height: 129.3 91
|
辞書の呼び出し
for を使い連続呼び出し
辞書の内容をひとつづつ処理する場合,for が便利です.その例を以下に示します.
forを使った読み込みの例 |
実行結果 |
# ----- 辞書の作成 -----
doraemon = {'name':'ドラえもん', 'birthday':'2012/9/3',\
'height':129.3,\
0:3.1415, 1:2.71828, 2:'のび太'}
print("\n----- key, value -----")
for key,value in doraemon.items(): # キーと値の取り出し
print("{0}\t{1}".format(key,value))
print("\n ----- key ----")
for key in doraemon: # キーの取り出し
print("{0}".format(key))
|
----- key, value -----
0 3.1415
birthday 2012/9/3
2 のび太
height 129.3
1 2.71828
name ドラえもん
----- key ----
0
birthday
2
height
1
name
|
items()メソッドを使うことによりキーと値のリストが組となったリストになります.繰り返しを「for 変数 in 辞書:」とすると,辞書のキーのみが変数に代入されます.
辞書の演算子・メソッド
演算子
辞書のキーや値は,インデックス指定の他にアンパックを使って取り出すことも可能です.
辞書のアンパックの例
001 # -*- coding:utf-8 -*-
002
003 # ----- アンパックを使って関数の引数に -----
004 def print_profile(name=None, birthday=None, height=None):
005 print("名前: ", name)
006 print("生年月日: ", birthday)
007 print("身長: ", height)
008
009 # ----- メイン関数 -----
010 if __name__ == "__main__":
011 doraemon = {'name':'ドラえもん', \
012 'birthday':'2012/9/3', 'height':129.3}
013
014 # -- アンパック --
015 a, b, c = doraemon
016 print("a={0:s}\tb={1:s}\tc={2:s}".format(a, b, c))
017 print("*doraemon=", *doraemon)
018 print_profile(**doraemon)
これを実行すると,スクリーン上に以下が得られます.
実行結果
a=height b=name c=birthday
*doraemon= height name birthday
名前: ドラえもん
生年月日: 2012/9/3
身長: 129.3
005行の代入 (=) の右辺がシーケンス — ここでは辞書の場合 — 左辺の変数にはシーケンスがアンパックされて変数に代入されます.辞書の場合,アンパックではキーが返されます.017行では,アスタリスク演算子 (*) を使って,アンパックしています.ここでもキーのみが返されます.アンパックで,最も有用なのは 018 行です.ふたつのアスタリスク (**) を使い,アンパックし,メソッドの引数に渡しています.動作は見てのとおりです.
メソッド
辞書クラスには,以下のメソッドを使うことができます.
メソッド (関数) |
動作 |
clear() |
すべての辞書の要素 (キー, 値) を削除し,空の辞書を返す. |
copy() |
辞書のコピーを返します. |
fromkeys(seq[, v]) |
シーケンス seq の値をキーとした新しい辞書を返します.値 v を指定することもできます.指定しない場合,デフォルトの'None' です. |
get(key[,d]) |
キーの値を返します.キーが無い場合は,d を返します.デフォルトは None です.dec[key] の場合,キーがない場合エラーになりますが,dic.get(key)はエラーになりませんので便利です. |
items() |
辞書のタプル(キー, 値)のリストを返します. |
keys() |
辞書のキーのリストを返す. |
pop(key[,d]) |
キーのアイテムを削除し,その値を返します.キーが無い場合,dを変えします.dが指定されずにキーが見つからない場合、KeyErrorが発生します. |
popitem() |
任意の項目 (キー, 値) を削除して返します.辞書が空っぽの場合,キーエラーになります. |
setdefault(key[,d]) |
キーが辞書にある場合は,その値を返します.そうでない場合は、値dのキーを挿入しdを返します (デフォルトはNone). |
update([other]) |
他のキー/値ペアで辞書を更新し,既存のキーを上書きします. |
values() |
辞書の値のリストを返す. |
ページ作成情報
参考資料
更新履歴
|