20110515 とばり

 ディクショナリ

ひとはいさ 心もしらず ふるさとは 花ぞ昔の 香ににほひける
(古今和歌集)

秋の菊 にほふかぎりは かざしてむ 花よりさきと 知らぬわが身を
(古今和歌集)

                                      紀貫之

きみならで 誰にか見せむ 梅花 色をも香をも しる人ぞしる
  (古今和歌集)

あずま路の 小夜の中山 なかなかに 名にしか人を 思そめけむ
 (古今和歌集)

                                      紀友則

 20131117改訂中

 

1ディクショナリとは何か

 キーと値をペアとするソートされない集合である。 
    
        
 
  キー :  文字列数値
などリストと辞書自身以外のほとんどのオブジェ  
        クトが利用できる。重複できない。

  値:     
データ型に制約がない。リスト辞書も利用できる。 
  ディクショナリ:初期化には中カッコを、値の代入には角カッコを使う。
         
 リストと同様キーによってデータにアクセスする。ディクショナ
         リの中にディクショナリを入れることができ る。                   
          順序という考えはない。
         要素を追加する場合は、存在しないキーを指定して要素を決
         める。      
 
 キーの唯一性 :値にアクセスするのにキーを使うから一つのディクショ
            ナリの中で重複しないことを条件とする
            重複したキーが含まれた場合、最後に入れたキーの値
            になる。
  
dict関数

 >>> s=dict()                オブジェクト相続を指定してカラ
                                                      の辞                  
                                                      書を作るdict関数を使う
    

>>> s          
{}       

>>> s["展示開始日"]="20100608"   キーと値をする入力

>>> print(s)
  
  
 {'展示開始日': '20100608'}

>>> 相続={"相続番号":"201001","被相続人":"乙野太郎","相続人":"乙野
       一郎"}

>>> print(相続)

{'相続人': '乙野一郎', '被相続人': '乙野太郎', '相続番号': '201001'}

>>> 相続['相続人']         キーを指定して値をとりだす

'乙野一郎'

>>> 相続.get("相続番号")    get関数で値をとりだす

201001'

>>> list(相続.keys())       keys()関数でキーの一覧を取り出す     

['相続人', '被相続人', '相続番号']

>>> list(相続.values())      values()関数sで値の一覧を取り出す     

['乙野一郎', '乙野太郎', '201001']

>>> list(相続.items())      items()関数でタプルにした一覧を取り出す      

[('相続人', '乙野一郎'), ('被相続人', '乙野太郎'), ('相続番号', '201001')]

>>> 相続.setdefault('被相続人') setdefault関数でキーを指定して値を得る

'乙野太郎'

>>> 相続.setdefault('相続税')  setdefault関数で新しいキーを設定する。

>>> 相続            新しいキーとデフォルトの値noneが作られる

{'相続人': '乙野一郎', '被相続人': '乙野太郎', '相続税': None, '相続番号': '201001'}

>>> 相続['相続税']='120万円'  新しいキーに値を設定する

>>> 相続

{'相続人': '乙野一郎', '被相続人': '乙野太郎', '相続税': '120万円', '相続番号': '201001'}

>>> len(相続)                      辞書の長さを求める

3

>>> "相続番号" in 相続    キーの存在を求める 

True

>>> vals=相続.values()    数valsに相続辞書の値を入れる

>>> "乙野太郎" in vals    変数valsに乙野太郎という値の存在を求める

True
 
コピーを作る copy()

>>> 相続={"相続番号":"201001","被相続人":"乙野太郎","相続人":"乙野一郎"}
>>> a=相続.copy()
>>> a
{'相続番号': '201001', '被相続人': '乙野太郎', '相続人': '乙野一郎'}

辞書型のオブジェクトを作成したあとで、キーを指定して値を取得するには次のように行う。
辞書オブジェクト[キー]
辞書オブジェクトの中の要素の中からキーが一致する要素を検索し、その要素の値を返す。

>>> 相続={"被相続人":"山田太郎","相続人":"山田花子"}
                                 
相続辞書を作成する



>>> val=相続["相続人"]        変数valに相続人キーを設定する

>>> val
'山田花子'

>>> 相続={"被相続人":"山田太郎","相続人":"山田花子"}
 
>>> 相続["相続人"]="山田桃子"   相続人キーに値山田桃子を設定する

>>> 相続  

{'被相続人': '山田太郎', '相続人': '山田桃子'}  山田花子が山田桃子にな
                              る

>>> 相続["相続人2"]="山田花子"    相続人2キーに値山田花子を設
                          定する

>>> 相続

{'相続人2': '山田花子', '被相続人': '山田太郎', '相続人': '山田桃子'}

なお存在しないキーを指定して値を取得しようとすると「KeyError」が発生する。

値の変更

辞書型のオブジェクトでは一度オブジェクトが作成された後で、各要素の値が参照するオブジェクトを変更することが出来る。値が参照するオブジェクトを変更するには、キーを指定して取得した値に対して新しいオブジェクトを代入する。
辞書オブジェクト[キー] = オブジェクト

>>> 相続["相続人"]="山本桜子"

>>> 相続

{'被相続人': '山田太郎', '相続人': '山本桜子',相続人2:山田桃子}

>>> print(相続["相続人"])

山本桜子

辞書のサイズの取得(len関数)

辞書オブジェクトが現在持っている要素数(キーの数)を取得することが出来る
。組み込み関数の「len」関数を使用。
len」関数は辞書の他にシーケンス型のリストや文字列、タプルなどの要素数を取得できる。

>>> print("要素数=",len(相続))

要素数= 3

要素の追加と連結(updateメソッド)

辞書オブジェクトに要素を追加するには、現在存在しないキーを指定して値を代入。

>>> 相続["相続開始日"]="20101001"

>>> 相続

{'相続開始日': '20101001', '被相続人': '山田太郎', '相続人': '山本花子',相続人2:山田桃子
}


辞書オブジェクトの連結

辞書オブジェクトに他の辞書オブジェクトの要素を連結させることも可能。辞書型で用意されている「update」メソッドを使う。

>>> 相続.update({"配偶者":"山田月子"})

>>> 相続

{'配偶者': '山田月子', '相続開始日': '20101001', '被相続人': '山田太郎', '相続人': '山本花子',相続人2:山田桃子} 

update」メソッド 引数に指定した辞書オブジェクトと対象の辞書オブジェクト、同じキーを持つ要素があった場合には、その要素は追加ではなく上書きとなる。

>>> a={'売上':1200,'消費税':50}

>>> b={'売上':2000,'消費税':100,'法人税':50}

>>> a.update(b)         bの内容で更新される

>>> a

{'法人税': 50, '消費税': 100, '売上': 2000}

>>> b               bの内容は変化しない

{'法人税': 50, '消費税': 100, '売上': 2000}

>>> b.update(消費税=120)   =引数方式で変更

>>> b

{'法人税': 50, '消費税': 120, '売上': 2000}

>>> b.update([('法人税',70)])  タプル型で変更

>>> b

{'法人税': 70, '消費税': 120, '売上': 2000}

>>> b.update({'消費税':150})  リテラル型本来の型で変更

>>> b

{'法人税': 70, '消費税': 150, '売上': 2000}

キーと値のリストを取得(keysメソッド, valuesメソッド, itemsメソッド)

辞書オブジェクトに含まれているキーや値の一覧を取得する方法。 

辞書オブジェクト.keys()

>>> list(相続.keys())

['配偶者', '相続開始日', '被相続人', '相続人',相続人2]


値のリストを取得する「values」メソッドを使う。

辞書オブジェクト
values()メソッド

 values()  
存在する値を返す。

 >>> list(相続.values())

['山田月子', '20101001', '山田太郎', '山本花子'.山田桃子]

辞書オブジェクトに含まれる各要素について(キー, 値)のタプル型のオブジェクトを作成し、そのリストを取得するには「itemsメソッドを使う。

辞書オブジェクト.items()

>>> list(相続.items())

[('配偶者', '山田月子'), ('相続開始日', '20101001'), ('被相続人', '山田太郎'), ('相続人', '山本花子'),('相続人2'),'山田桃子')]

  キーの確認(in演算子, not in )

辞書オブジェクトに指定のキーが含まれているかどうかを確認。「in」演算子を使う。
キー in 辞書オブジェクト
「in」演算子の左辺に指定したキーが右辺の辞書オブジェクトの要素の中に存在している場合は「True」を返す。存在しない場合は「False」を返す。
似た演算子として「not in」演算子は指定のキーが含まれていない場合に「True」を返す。

キー not in 辞書オブジェクト
具体的には次のように記述します。 


>>> print("被相続人"in 相続)

True

>>> print("相続人3
"in 相続)

Fals

del オブジェクト

del文は引数に指定したオブジェクトを削除するための文。「del」文の引数には削辞書オブジェクト[キー]の形式で取得した辞書オブジェクトの要素を指定。 


>>> del 相続["相続人"]

>>> 相続

{'配偶者': '山田月子', '相続開始日': '20101001', '被相続人': '山田太郎,相続人2:山田桃子'}


キーを指定して要素を削除する

popメソッドを実行すると、指定したキーに該当する要素を削除し値を返す。

1番目の引数に削除したい要素のキーを指定。キーが辞書オブジェクトに含まれていれば要素を削除し、要素の値を返す。

>>> val=相続.pop("配偶者")
>>> val
'山田月子'
>>> 相続
{'相続開始日': '20101001', '被相続人': '山田太郎',相続人2:山田桃子}


任意の要素を削除する

popitem」メソッドを実行すると、辞書オブジェクトの中のいずれかの要素を削除し、キーと値を要素とするタプルとして返す。
この時削除される要素はランダムに決まる。その為、辞書オブジェクトに含まれる要素を順に取り出し処理するような場合に適している。取得できるタプルは「(キー, 値)」の形式となる。

>>> while 相続:
             tuple=相続.popitem()

 
>>> 相続
{}

上記では辞書オブジェクトの要素が空になるまで要素を取り出して削除している。

全てのの要素を削除する

辞書型で用意されているclear」メソッドを実行すると全ての要素を削除する。

dict = {"yamada":75, "endou":82}

dict.clear()
print (dict )
 

この時辞書オブジェクトが削除されるのではなく、空の辞書オブジェクトになる。


辞書内包表記

リストと同様


 復習

 

    1平均値       

 def dic():
    dict_toh={"aomori":5340,"akita":4644,"sendai":5344,"yamagata":4968,
\
              "fukusima":6259,"morioka":5278}
    for val in
dict_toh:
        print(val)
 >>> dic()
aomori            キーだけが返される
akita
sendai
fukusima
yamagata
morioka

 def dic():        値のリストを作り、合計を算出し、lenで要素数を計
              算し、割り算で平均値を算出、表示する
    dict_toh
={"aomori":5340.0,"akita":4644.0,"sendai":5344.0,"yamagata":4968.0,\
              "fukusima":6259.0,"morioka":5278.0}
    a=dict_toh.values()
    print(list(a))
    b=list(a)
    c=sum(b)
    d=len(b)
    print("heikin",c/d)

 >>> dic()

 [5340.0, 4644.0, 5344.0, 6259.0, 4968.0, 5278.0]

 heikin 5305.5

 2   科目表

>>>  kamoku={'現金': 101, '小口現金': 102, '当座預金': 103

>>>  kamoku
{'小口現金': 102
, '現金': 101, '当座預金': 103'}

>>>  tel['当座預金']
     103

 3 dict()関数 キー 値 のペアのタブルから辞書をつくる

>>> a=dict([(103,'当座預金'),(101,'現金'),(102,'小口現金')])
>>>
a

{101: '現金', 102: '小口現金', 103: '当座預金'}

>>> a[103]

'当座預金'

キーが文字列のとき、ペアの指定にキーワード引数を使う

>>> b=dict(現金=101,小口現金=102,当座預金=103)

>>> b


{'小口現金': 102, '当座預金': 103, '現金': 101}

>>> b["現金"]

101

 4 会計用語集

  資産=dict(現金='企業が所有する金銭等',売掛金='商品を掛けで販売した場合の債権',貸付金='現金を貸し付けた場合の債権',商品='販売目的で所有する物品',建物='営業用の店舗、事務所等',車両運搬具='営業用のトラック、自家用車',備品='営業用の机、椅子、事務用機械、陳列棚等',土地='営業用の店舗、事務所等の敷地で企業所有のもの')

 dict関数で辞書型データ資産をつくるキーワード引数型でコンパクトに作成した例
 キーは’’で囲まないで済む。値は’’で囲む。

   >>> 資産                       辞書 資産を表示する
{'貸付金': '現金を貸し付けた場合の債権', '建物': '営業用の店舗、事務所等', '備品': '営業用の机、椅子、事務用機械、陳列棚等', '現金': '企業が所有する金銭等', '土地': '営業用の店舗、事務所等の敷地で企業所有のもの', '商品': '販売目的で所有する物品', '売掛金': '商品を掛けで販売した場合の債権', '車両運搬具': '営業用のトラック、自家用車'}

キーは’’で囲まれて出来上がっている。

>>> 資産.get('建物')         
.get関数で値を検索する・

'営業用の店舗、事務所等'    
 

>>> 資産['建物']           角 カッコ キー.から検索する・

'営業用の店舗、事務所等'     

 負債=dict(買掛金='商品を後払いで仕入れたとき発生する債務')

                     キーワード引数型でコンパクトに作成

>>> 負債['買掛金']         角 カッコ キー.で検索する・

'商品を後払いで仕入れたとき発生する債務'

資本=dict(資本金='企業に出資者から投下された資金') 
                    キーワード引数型でコンパクトに作成

>>> 資本['資本金']          角 カッコ キー.で検索する・

'
企業に出資者から投下された資金'


   

 4 応用

 

 (1)社員名簿

 田中={'氏名':'田中雄二','年齢':42,'給与':40000,'職種':'経理'}
 鈴木={'氏名':'鈴木一郎','年齢':35,'給与':40000,'職種':'人事'}     

 >>> 田中['給与'],鈴木['職種']
 
 (40000, '人事')

 >>> 田中['給与']*1.15
 
 46000.0

 (2)単語帳を作る

  >>> c800dic1={'covetous': '非常に欲しいと思う', 'commnsurate': 'にふ 
    さわ  しい', 'complacement': '自己満足の', 'crisscross': '十文字の',   
  'cadaverous': '青ざめた', 'celibate': '独身主義者の', 'callous': '硬くなっ
  た', 'conciliatory': '手名づける', 'complaisant': 'ものわかりのよい',
  'cerebral': '大脳の', 'corpulent': '肥満の', 'consummate': '完全な',
  'comatose': '昏睡状態', 'concomitant': '付随する', 'colossal': '巨大な',
  'conjugle': '結婚の', 'captious': 'あらさぎしをする', 'congential': '先天的 
  な',  'clairvoyant': '透視能力のある', 'conducive': '助けとなる'
}

  >>> c800dic1['covetous']

  '非常に欲しいと思う'

  sorted関数

 >>> sorted(c800dic1)
 
  ['cadaverous', 'callous', 'captious', 'celibate', 'cerebral', 'clairvoyant',  
  'colossal', 'comatose', 'commnsurate', 'complacement', 'complaisant',
  'conciliatory', 'concomitant', 'conducive', 'congential', 'conjugle',
  'consummate', 'corpulent', 'covetous', 'crisscross']

 <class 'dict'>
 

 sorted関数

   
,

http://www.tobari-kaikei.com/hpeditor/ytextbox.html