pythonの基本的な知識点の辞書(3)


Pythonの辞書はシーケンスではなくマッピングです.マッピングは他のオブジェクトの集合ですが、相対的な位置ではなくキーで格納されます.
辞書はPythonコアオブジェクトセットの唯一のマッピングタイプであり、リストのように、その場で変更したり、必要に応じて減少したりすることができます.
辞書の作成方法1:
>>> D = {'food':'Spam','quantity':4,'color':'pink'}
>>> D['food']
'Spam'
>>> D['quantity'] += 1
>>> D
{'food': 'Spam', 'color': 'pink', 'quantity': 5}
>>> 
方式2:空の辞書を開始し、キーを1つずつ入力します.
たとえば、誰かのレコードの名前フィールドを説明します.
>>> D = {}
>>> D['name'] = 'Bob'
>>> D['job']  = 'dev'
>>> D['age']  = 40
>>> D
{'age': 40, 'job': 'dev', 'name': 'Bob'}
>>> print(D['name'])
Bob

Pythonネストの柔軟性:
>>> rec = {'name':{'first':'Bob','last':'Smith'},
       'job':['dec','mgr'],
       'age': 40.5}
>>> rec['name']
{'last': 'Smith', 'first': 'Bob'}
>>> rec['name']['last']
'Smith'
>>> rec['job']
['dec', 'mgr']
>>> rec['job'][-1] #rec['job'][0]         dec
'mgr'
>>> rec['job'].append('janitor')
>>> rec['job']
['dec', 'mgr', 'janitor']
>>> rec
{'age': 40.5, 'job': ['dec', 'mgr', 'janitor'], 'name': {'last': 'Smith', 'first': 'Bob'}}
>>> 
ディクショナリ内のキーのソート:forループ
マッピングとして、辞書はキーによる要素の取得のみをサポートします.
しかし,様々な一般的なアプリケーションの場合,呼び出し方法により,特定の動作もサポートする.
辞書はシーケンスではないため、左から右への信頼できるシーケンスは含まれていません.
キー値を順番に並べ替えるのが一般的な方法です.
>>> D = {'a':1,'b':2,'c':3}
>>> D
{'a': 1, 'c': 3, 'b': 2}
>>> Ks = list(D.keys())
>>> Ks
['a', 'c', 'b']
>>> Ks.sort()
>>> Ks
['a', 'b', 'c']
>>> for key in Ks:
	print(key,'=>',D[key])

	
('a', '=>', 1)
('b', '=>', 2)
('c', '=>', 3)
sorted内蔵関数を使用して、一歩で完了できます.sorted呼び出しは結果を返し、オブジェクトタイプをソートします.
辞書のキーの自動ソート:
>>> D
{'a': 1, 'c': 3, 'b': 2}
>>> for key in sorted(D):
	print(key,'=>',D[key])

	
('a', '=>', 1)
('b', '=>', 2)
('c', '=>', 3)
>>> 
反復:
オブジェクトを左から右にスキャンする各Pythonツールでは、反復プロトコルが使用されます.これは、上述したsorted呼び出しが辞書の上で直接動作するため、keysメソッドを呼び出してシーケンスを得る必要はありません.辞書は反復可能なオブジェクトであり、nextで後続のキーを返すことができるからです.
反復プロトコルは次のように使用されます.
>>> squares = [x ** 2 for x in [1,2,3,4,5]]
>>> squares
[1, 4, 9, 16, 25]
     
>>> squares = []
>>> for x in [1,2,3,4,5]:
	squares.append(x**2)

	
>>> squares
[1, 4, 9, 16, 25]
>>> 
辞書では、存在しないキー値にアクセスする可能性があります.そうすると、エラーが発生します.このような状況を回避するにはどうすればいいですか.
if文を使用してキー値が存在するかどうかを判断できます.
>>> D = {'a':1,'b':2,'c':3}
>>> D
{'a': 1, 'c': 3, 'b': 2}
>>> D['d'] = 99
>>> D
{'a': 1, 'c': 3, 'b': 2, 'd': 99}
>>> D['f']

Traceback (most recent call last):
  File "", line 1, in 
    D['f']
KeyError: 'f'
>>> 'f' in D
False
>>> if not 'f' in D:
	print('missing')

	
missing