python学習ノートの3:辞書、インデックスが使いにくい場合
19866 ワード
辞書はpythonで唯一組み込まれているマッピングタイプです.辞書の値には特別な順序はありませんが、特定のキーに格納されています.キーは、数値、文字列、さらにはメタグループであってもよい.
1.辞書の作成と使用
辞書は次のように作成できます.
辞書は複数のキーとそれに対応する値の対からなる.各キーとその値の間には、コロン(:)で区切られ、アイテムの間にはカンマ(,)で区切られ、辞書全体が括弧で囲まれています.空の辞書:{}
1.1 dict関数
dict関数を使用して、マッピング(他の辞書など)や(キー、値)のようなシーケンスで辞書を作成できます.
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辞書の書式設定文字列
ディクショナリフォーマット文字列:各変換説明子の%文字の後に、(カッコで囲まれた)キーを付けて、他の説明要素に続くことができます.
与えられたすべてのキーが辞書で見つかる限り、任意の数の変換説明子が得られます.
1.4辞書の方法
1.4.1 clear
clearメソッドは、辞書内のすべてのアイテムを消去します.これは元の場所で操作され、戻り値がありません(またはnoneを返します).
次の2つのケースを考慮します.
a.xを新しい空の辞書に関連付けて空にします.これはyに少しも影響しません.yは元の辞書に関連付けられています.
b.元の辞書のすべての要素を空にするにはclearメソッドを使用する必要があります.
1.4.2 copy
copyメソッドは、同じキー値ペアを持つ新しい辞書を返します(このメソッドは、値自体がコピーではなく同じであるため、浅いコピーを実現します).
コピーに値を置換する場合、元の辞書は影響を受けませんが、値を変更すると元の辞書が変わります.
この問題を回避する方法は、すべての値を含む深さレプリケーション-deepcopy()を使用してレプリケーションします.
1.4.3 fromkeys
fromkeysメソッドは、指定されたキーを使用して新しい辞書を作成します.各キーのデフォルト値はNoneで、すべての辞書のタイプdictで直接呼び出すことができます.デフォルト値を使用したくない場合は、自分で値を指定することもできます.
1.4.4 get
getメソッドは、より緩やかな辞書項目へのアクセス方法です.getを使用して存在しないキーにアクセスすると、None値が得られます.Noneの代わりにデフォルト値をカスタマイズすることもできます.
1.4.5 has_key
has_keyメソッドは、辞書に与えられたキーが含まれているかどうかを確認します.d.has_key(k)
1.4.6 itemsとiteritems
itemsメソッドは、すべての辞書アイテムをリスト形式で返しますが、リスト内の各アイテム(キー、値)が戻るときに特別な順序はありません.iteritemsメソッドの役割はほぼ同じですが、リストではなく反復オブジェクトが返されます.
1.4.7 keysとiterkeys
keysメソッドは辞書のキーをリスト形式で返し、iterkeysはキーの反復器を返します.
1.4.8 popメソッド
popメソッドは、所与のキーに対応する値を取得し、このキー値ペアを辞書から削除するために使用される.
1.4.9 popitem
popitemメソッドではランダムアイテムがポップアップされ、順序の概念はありません.アイテムを次々と削除して処理するには、この方法が非常に有効です.
1.4.10 setdefault
setdefaultメソッドはgetメソッドとある程度類似しており,所与のキーに関連付けられた値を得ることができ,辞書に所与のキーが含まれていない場合にも対応するキー値を設定することができる.
前述したように、キーが存在する場合はデフォルト値(オプション)を返し、それに応じて辞書を更新し、キーが存在する場合は対応する値を返しますが、辞書は変更されません.
1.4.11 update
updateメソッドでは、ある辞書項目を使用して別の辞書を更新できます.指定した辞書項目は古い辞書に追加され、同じキーがあれば上書きされます.
1.4.12 valuesとitervalues
valuesメソッドは、辞書の値(itervaluesが値を返す反復器)をリストとして返します.戻りキーのリストとは異なり、戻り値リストに重複する要素を含めることができます.
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]