python学習ノートの3:辞書、インデックスが使いにくい場合

19866 ワード

辞書はpythonで唯一組み込まれているマッピングタイプです.辞書の値には特別な順序はありませんが、特定のキーに格納されています.キーは、数値、文字列、さらにはメタグループであってもよい.
1.辞書の作成と使用
辞書は次のように作成できます.
phonebook = {'Alice':'2341','Beth':'9102','Ceil':'3258'}

辞書は複数のキーとそれに対応する値の対からなる.各キーとその値の間には、コロン(:)で区切られ、アイテムの間にはカンマ(,)で区切られ、辞書全体が括弧で囲まれています.空の辞書:{}
 
1.1 dict関数
dict関数を使用して、マッピング(他の辞書など)や(キー、値)のようなシーケンスで辞書を作成できます.
>>> items = [('name','Gumby'),('age'.42)]

>>> d = dict(items)

>>> d

{'age':42,'name':'Gumby'}

>>> d = dict(name='Gumby','age'=42)

>>> d

{'age':42,'name':'Gumby'}

 
1.2基本辞書操作
(1)len(d)はd中の項目(キー値ペア)の数を返す.
(2)d[k]は、kに関連付けられた値を返す.
(3)d[k]=v値vをキーkに関連付ける.
(4)del d[k]削除キーがkの項目;
(5)k in d d dにキーがkである項目があるかどうかを検査する.
 
1.3辞書の書式設定文字列
ディクショナリフォーマット文字列:各変換説明子の%文字の後に、(カッコで囲まれた)キーを付けて、他の説明要素に続くことができます.
与えられたすべてのキーが辞書で見つかる限り、任意の数の変換説明子が得られます.
>>> temple = ‘the price of cake is $%(cake)s,the price of milk of cake is $%(milk)s. $%(cake)s is OK’

>>> price = {'cake':4,'milk':5}

>>>print temple % price

‘the price of cake is $4,the price of milk of cake is $5. $4 is OK’

 
1.4辞書の方法
1.4.1 clear
clearメソッドは、辞書内のすべてのアイテムを消去します.これは元の場所で操作され、戻り値がありません(またはnoneを返します).
次の2つのケースを考慮します.
a.xを新しい空の辞書に関連付けて空にします.これはyに少しも影響しません.yは元の辞書に関連付けられています.
>>> x = {}

>>> y = x

>>> x['key'] = 'value'

>>> y

{'key':'value'}

>>> x = {}

>>> y

{'key':'value'}

b.元の辞書のすべての要素を空にするにはclearメソッドを使用する必要があります.
>>> x = {}

>>> y = x

>>> x['key'] = 'value'

>>> y

{'key':'value'}

>>> x.clear()

>>> y

{}

 
1.4.2 copy
copyメソッドは、同じキー値ペアを持つ新しい辞書を返します(このメソッドは、値自体がコピーではなく同じであるため、浅いコピーを実現します).
コピーに値を置換する場合、元の辞書は影響を受けませんが、値を変更すると元の辞書が変わります.
>>> x = {'a':1,'b':[2,3,4]}

>>> y = x.copy()

>>> y['a'] = 5

>>> y['b'].remove(3)

>>> y 

 {'a':5,'b':[2,4]}

>>> x

 {'a':1,'b':[2,4]}

この問題を回避する方法は、すべての値を含む深さレプリケーション-deepcopy()を使用してレプリケーションします.
>>> x = {'a':1,'b':[2,3,4]}

>>> y = x.copy()

>>> z = x.deepcopy()

>>> x['a'].append(5)

>>> y 

 {'a':1,5,'b':[2,3.4]}

>>> z

 {'a':1,'b':[2,3,4]}

 
1.4.3 fromkeys
fromkeysメソッドは、指定されたキーを使用して新しい辞書を作成します.各キーのデフォルト値はNoneで、すべての辞書のタイプdictで直接呼び出すことができます.デフォルト値を使用したくない場合は、自分で値を指定することもできます.
>>> {}.fromkeys(['name','age'])

{'age':None,'name':None}

>>>

>>> dict.fromkeys(['name','age'],'unknow')

{'age':'unknow','name':'unknow'}

 
1.4.4 get
getメソッドは、より緩やかな辞書項目へのアクセス方法です.getを使用して存在しないキーにアクセスすると、None値が得られます.Noneの代わりにデフォルト値をカスタマイズすることもできます.
>>> d = {}

>>> print d.get('name')

None

>>> d.get("name",'N/A')

'N/A'

>>> d[''name] = 'Eric'

>>> d.get('name')

'Eric'

 
1.4.5 has_key
has_keyメソッドは、辞書に与えられたキーが含まれているかどうかを確認します.d.has_key(k)
>>> d = {}

>>> d.has_key('name')

False

 
1.4.6 itemsとiteritems
itemsメソッドは、すべての辞書アイテムをリスト形式で返しますが、リスト内の各アイテム(キー、値)が戻るときに特別な順序はありません.iteritemsメソッドの役割はほぼ同じですが、リストではなく反復オブジェクトが返されます.
>>> d = {'a':1,'b':2,'c':3}

>>>d.items

[('a',1),('b',2),('c',3)]

>>> it = d.iteritems()

>>> it

<dictionary-iteritems object at 169050>

>>> list(it)

[('a',1),('b',2),('c',3)]

 
1.4.7 keysとiterkeys
keysメソッドは辞書のキーをリスト形式で返し、iterkeysはキーの反復器を返します.
 
1.4.8 popメソッド
popメソッドは、所与のキーに対応する値を取得し、このキー値ペアを辞書から削除するために使用される.
>>> d = {'a':1,'b':2,'c':3}

>>> d.pop('a')

>>> d

{'b':2,'c':3}

 
1.4.9 popitem
popitemメソッドではランダムアイテムがポップアップされ、順序の概念はありません.アイテムを次々と削除して処理するには、この方法が非常に有効です.
>>> d = {'a':1,'b':2,'c':3}

>>> d.popitem()

>>> d

{'a':1,'c':3}

 
1.4.10 setdefault
setdefaultメソッドはgetメソッドとある程度類似しており,所与のキーに関連付けられた値を得ることができ,辞書に所与のキーが含まれていない場合にも対応するキー値を設定することができる.
>>> d = {}

>>> d.setdefault('name','N/A')

'N/A'

>>> d

{'name': 'N/A'}

>>> d.setdefault('name',A)

'N/A'

前述したように、キーが存在する場合はデフォルト値(オプション)を返し、それに応じて辞書を更新し、キーが存在する場合は対応する値を返しますが、辞書は変更されません.
 
1.4.11 update
updateメソッドでは、ある辞書項目を使用して別の辞書を更新できます.指定した辞書項目は古い辞書に追加され、同じキーがあれば上書きされます.
>>> d = {'a':1,'b':2,'c':3}

>>> x = {'a':5,'d':6}

>>> d.update(x)

>>> d

{'a': 5, 'c': 3, 'b': 2, 'd': 6}

 
1.4.12 valuesとitervalues
valuesメソッドは、辞書の値(itervaluesが値を返す反復器)をリストとして返します.戻りキーのリストとは異なり、戻り値リストに重複する要素を含めることができます.
>>> d = {}

>>> d[1]=1

>>> d[2]=2

>>> d[3]=3

>>> d[4]=1

>>> d

{1: 1, 2: 2, 3: 3, 4: 1}

>>> d.values()

[1, 2, 3, 1]