メインコンテンツへスキップ
見出し画像

Python基礎2: 辞書型(Dict型)

    概要

    Pythonの辞書(Dict)に関する内容です。一般的な操作を記載しました。


    1.辞書型のイメージ

    辞書は指定した値(以下:Key)を入れるとKeyに応じた別の値(Value)を返してくれます。リストと異なり基本的には入力の順序は記憶しておりません。

    dict説明1

    2.辞書の作成方法

    2-1.一般的な記載方法

     一般的な記載方法は{Key:Value}となります。

    [In]
    items = {'BTC':4684348, 'ETH':317246, 'ETC':5143, 'LTC':16475, 'XRP':102.47,'BAT':69.47,'XEM':16.036}
    print(items)
    [Out]
    {'BTC': 4684348, 'ETH': 317246, 'ETC': 5143, 'LTC': 16475, 'XRP': 102.47, 'BAT': 69.47, 'XEM': 16.036}

     キーワード引数を使用した方法もあります。この場合Keyが文字列でも'や"クオテーションでは囲いません。

    [In]
    items = dict(BTC=4684348, ETH=317246, ETC=5143, LTC=16475, XRP=102.47,BAT=69.47,XEM=16.036)
    print(items)
    
    [Out]
    {'BTC': 4684348, 'ETH': 317246, 'ETC': 5143, 'LTC': 16475, 'XRP': 102.47, 'BAT': 69.47, 'XEM': 16.036}

    1-2.内包表記

     内包表記でも記載できます。リストなどが既にある時は便利です。

    [In]
    list_crypto = ['BTC', 'ETH', 'ETC', 'LTC', 'XRP','BAT','XEM']
    prices = [4684348, 317246, 5143, 16475, 102.47,69.47,16.036]
    items = {key:value for key, value in zip(list_crypto,prices)}
    print(items) #※items['BTC']としたら上記と同じ値を出力できます。
    
    [Out]
    {'BTC': 4684348, 'ETH': 317246, 'ETC': 5143, 'LTC': 16475, 'XRP': 102.47, 'BAT': 69.47, 'XEM': 16.036}
    [In]
    import string
    words = string.ascii_lowercase #出力:'abcdefghijklmnopqrstuvwxyz'
    nums_words = list(range(26)) #アルファベットと同じ数のリスト[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25]
    idtowords = {k:v for k, v in zip(words, nums_words)}
    print(idtowords)
    
    [Out]
    {'a': 0, 'b': 1, 'c': 2, 'd': 3, 'e': 4, 'f': 5, 'g': 6, 'h': 7, 'i': 8, 'j': 9, 'k': 10, 'l': 11, 'm': 12, 'n': 13, 'o': 14, 'p': 15, 'q': 16, 'r': 17, 's': 18, 't': 19, 'u': 20, 'v': 21, 'w': 22, 'x': 23, 'y': 24, 'z': 25}

    私は使いませんがdict()内に内包表記っぽく書けますのでご参考までに本を読んだ時に止まらない用。

    [In]
    list_crypto = ['BTC', 'ETH', 'ETC', 'LTC', 'XRP','BAT','XEM']
    prices = [4684348, 317246, 5143, 16475, 102.47,69.47,16.036]
    
    dict((key, value) for key, value in zip(list_crypto,prices))
    
    [Out]
    {'BTC': 4684348, 'ETH': 317246, 'ETC': 5143, 'LTC': 16475, 'XRP': 102.47, 'BAT': 69.47, 'XEM': 16.036}

    3.辞書内データの抽出

    3-1.個別抽出

    辞書からデータを抽出する一般的な方法は以下2つです。

    ①辞書[key]:一般的な方法です。keyがないとエラーが出ます。
    ②辞書.get(key):①で困る(エラーを出したくない)時に使います。

    [In]
    items = {'BTC':4684348, 'ETH':317246, 'ETC':5143, 'LTC':16475, 'XRP':102.47,'BAT':69.47,'XEM':16.036}
    print(items['BTC'])
    print(items.get('XEM'))
    print(items.get('DOGE')) #辞書には存在しないkey
    
    [Out]
    4684348
    16.036
    None

    3-2.一括抽出:key, values, items

     辞書はイテラブルでありfor文を使用して値を抽出できます。

    【各要素の抽出方法】
    ●keyのみ取得:辞書をそのまま渡す
    ●valueのみ取得:辞書.values()
    ●key・value両方取得する:辞書.items()

    [In1] キーのみ出力
    items = {'BTC':4684348, 'ETH':317246, 'ETC':5143, 'LTC':16475, 'XRP':102.47,'BAT':69.47,'XEM':16.036}
    for key in items:
       print(key)
    
    [Out1]
    BTC ETH ETC LTC XRP BAT XEM 
    [In2] 値のみ出力
    for value in items.values():
       print(value)
    
    [Out2]
    4684348 317246 5143 16475 102.47 69.47 16.036
    [In3] キーと値を出力
    for key, value in items.items():
       print(key, value)
    
    [Out3]
    BTC 4684348
    ETH 317246
    ETC 5143
    LTC 16475
    XRP 102.47
    BAT 69.47
    XEM 16.036

    4.データの追加・更新・削除

    4-1.個別処理

     データの追加・更新・削除は下記のとおりです。

    [In]
    items = {'BTC':4684348, 'ETH':317246, 'ETC':5143, 'LTC':16475, 'XRP':102.47,'BAT':69.47,'XEM':16.036}
    items['BTC'] = 5000000 #データの更新
    print(items)
    items['MONA'] = 149.700 #データの追加
    print(items)
    items.pop('BAT') #データの削除
    print(items)
    
    [Out]
    {'BTC': 5000000, 'ETH': 317246, 'ETC': 5143, 'LTC': 16475, 'XRP': 102.47, 'BAT': 69.47, 'XEM': 16.036}
    {'BTC': 5000000, 'ETH': 317246, 'ETC': 5143, 'LTC': 16475, 'XRP': 102.47, 'BAT': 69.47, 'XEM': 16.036, 'MONA': 149.7}
    {'BTC': 5000000, 'ETH': 317246, 'ETC': 5143, 'LTC': 16475, 'XRP': 102.47, 'XEM': 16.036, 'MONA': 149.7}

    4-2.一括でデータ追加:update()

     特定の辞書を別の辞書に丸ごと追加する場合はupdate()を使用します。

    [In]
    items1 = {'BTC':4684348, 'ETH':317246, 'ETC':5143}
    items2 = {'LTC':16475, 'XRP':102.47,'BAT':69.47,'XEM':16.036}
    
    items1.update(items2)
    print(items1)
    [Out]
    {'BTC': 4684348, 'ETH': 317246, 'ETC': 5143, 'LTC': 16475, 'XRP': 102.47, 'BAT': 69.47, 'XEM': 16.036}

     なお更新する辞書内に同じKeyがあると追加側のデータに更新されます。

    [In]
    items1 = {'BTC':4684348, 'ETH':317246, 'ETC':5143}
    items2 = {'BTC':16475, 'XRP':102.47}
    
    items1.update(items2)
    print(items1)
    [Out] ※4684348が上書きされた
    {'BTC': 16475, 'ETH': 317246, 'ETC': 5143, 'XRP': 102.47}

    5.ソート

    5-1.入力順序を記憶(collections)

     辞書に入力した順番を覚えさせたい場合はOrderedDictを使用します。
    (※多分python3.6以上だとデフォルトで順序が保持されているはず・・)

    [In]
    from collections import OrderedDict
    d = OrderedDict()
    
    words = string.ascii_lowercase #出力:'abcdefghijklmnopqrstuvwxyz'
    nums_words = list(range(26))
    
    for key, value in zip(words, nums_words):
       d[key]=value
    
    d
    
    [Out]
    OrderedDict([('a', 0), ('b', 1), ('c', 2), ('d', 3), ('e', 4), ('f', 5), ('g', 6), ('h', 7), ('i', 8), ('j', 9), ('k', 10), ('l', 11), ('m', 12), ('n', 13), ('o', 14), ('p', 15), ('q', 16), ('r', 17), ('s', 18), ('t', 19), ('u', 20), ('v', 21), ('w', 22), ('x', 23), ('y', 24), ('z', 25)])

    5-2.KeyとValueの入れ替え

     items()+内包表記を組み合わせるとkeyとvalueを入れ替えができます。

    [In]
    wordstoid = {v:k for k, v in idtowords.items()} #idtowords=alphabet:idの辞書※上記で作成
    wordstoid
    
    [Out]
    {0: 'a', 1: 'b', 2: 'c', 3: 'd', 4: 'e', 5: 'f', 6: 'g', 7: 'h', 8: 'i', 9: 'j', 10: 'k', 11: 'l', 12: 'm', 13: 'n', 14: 'o', 15: 'p', 16: 'q', 17: 'r', 18: 's', 19: 't', 20: 'u', 21: 'v', 22: 'w', 23: 'x', 24: 'y', 25: 'z'}

    6.特殊な辞書の作成:defalutdict

     辞書はKeyが存在しないとエラーが出ます。よって使用する場合はすべての要素を初期化する必要があります。

    [In]
    crypto_items = {}
    crypto_items['BTC']
    
    [Out]
    KeyError: 'BTC'

     初期化の手間を省く場合はdefaultdictPython標準ライブラリを使用します。下記によりKeyがない場合は初期値0が自動で入ります(lambdaは下記参照)。

    [In]
    from collections import defaultdict
    
    crypto_items = defaultdict(lambda: 0)
    crypto_items['BTC']
    
    [Out]
    0

    【参考】JSONファイル

     プログラミングでよく聞くJSONファイルですが、中身はほぼ辞書です。記法は下記の通り"ダブルクオーテーションである必要があります。

    {
       "consumer_key":"xxxx",
       "consumer_secret":"yyyy",
       "access_token":"zzzz",
       "access_token_secret":"tttt"
    }

     ※JSONは正確には文字列ですが初心者の時は”=辞書”で問題ないです。

    [In]
    import json
    info = {
        "name": "KIYO",
        "age": "100",
        "site": "note"
    }
    
    type(info) #->dict型
    type(json.dumps(info)) #->str型
    
    [Out]
    dict
    str

    あとがき

     少しずつ修正中。

     
     

    KIYO

     
     
    普段は製造業で企画/開発/設計しております。記事はプログラミング・機械学習、IoT関係の記事をメインで作成し、なるべく1つの記事で知りたいことを網羅していきます。内容は学術的より実装・アウトプット(ほしくなるもの)を重視して作成しています。 面白そうな仕事があればやりたいです!

    あなたへのおすすめ