Python学習:辞書(dictionary)

3143 ワード

dictionaryはpython内蔵データ構造の中で最も柔軟です.リストリストリストは秩序化されたオブジェクトの集合であり、dictionaryは無秩序な集合である.最も主要な違いは、辞書の要素がオフセットアクセスではなくキーによってアクセスされることです.
可変長、異機種、任意のネスト.辞書は元の場所で変更できますが、文字列やリストでのシーケンス操作はサポートされていません.辞書は無秩序な集合であるため,一定の順序で操作することはできない.
1、dictionaryの構造:
D={}        #   
D = {'spam':2, 'ham':1, 'eggs':3}    #     
D = {'food':{'spam':2, 'ham':1, 'eggs':3}    #  
D = dict.fromkeys(['a','b'])        #      {'a': None, 'b': None}
D = dict(name='Bob', age=42)        #{'age': 20, 'name': 'Bob'}

以上のいくつかの構造方法のほかに、keyとvalue対応技術があります.
>>>keyslist=['spam', 'ham', 'eggs']
>>>valslist=[2,1,3]
>>>D=dict(zip(keyslist, valslist))
{'eggs': 3, 'ham': 1, 'spam': 2}

リストとは異なり、dictionaryはkeyでインデックス演算を行います.
>>>D['eggs']
>>>D['food']['ham']
>>>'eggs' in D

次の3つの一般的な操作はlistオブジェクトを返します.
>>>D.keys()        #['eggs', 'ham', 'spam']
>>>D.values()      #[3, 1, 2]
>>>D.items()       #[('eggs', 3), ('ham', 1), ('spam', 2)]

以上がpython 2であることに注目すべきである.7の文法、Python 3.0でリスト呼び出しに配置する必要がありますpython 3.0のkeys()は反復器を返します.
>>>list(D.keys()) 
>>>list(D.values())
>>>list(D.items())

マージ操作は次のとおりです.
>>>D={'eggs': 3, 'ham': 1, 'spam': 2}
>>>D2={'turkey': 6, 'ham': 2}
>>>D.update(D2)    #  
>>>print(D)
{'turkey': 6, 'eggs': 3, 'ham': 2, 'spam': 2}

上記の操作から、マージ中に同じkeyのアイテムがマージされ、keyが同じでvalueが異なる場合に更新されることがわかります.
削除操作には2つの方法があります.pop()このキーに対応する値を削除します.存在しないキーを削除すると、エラーが表示されます.
>>>D.pop('eggs')
3
>>>del D['eggs']

その他の辞書方法:
存在しないキーを読み込むとエラーが発生することが多く、getメソッドでエラーを回避し、Noneのみを返すことができます.
>>>D.get('spam')        #A key that is there
2
>>>print(D.get('toast'))        #A key that is missing
None
>>>D.get('toast', 88)           #if a key is missing, 88 is default
88

辞書の大きさの比較はPython 3.0では有効ではありません:
>>>D1 > D2        #Python2.6        
>>>sorted(D1.items()) > sorted(D2.items())    #python3.0

練習問題:
1、2つの方法で5つの0を含むリストを作成する
>>>[0,0,0,0,0]
>>>[0]*5

2、2つの方法で辞書を作成し、2つのキー'a','b'があり、各キーに関連する値は0である.
>>>D={'a':0,'b':0}
>>>L1=['a','b']
>>>D = dict.fromkeys(L1,0)
>>>dict(a=0,b=0)

3、辞書オブジェクトを元の場所で修正する演算を4つ挙げる
>>>D.pop(key)
>>>D['spam']=10
>>>D.update(D2)
>>>del D(key)

転載先:https://blog.51cto.com/12877417/1921254