記事のディレクトリ
1.辞書は何ですか
我々はすでに知っている、リストやタプルは、例えば、彼のクラスメートの名前を収集順序を表すために使用することができます。
【「アダム」、「リサ」、「バート」]
あるいは、試験結果のリスト:
[95、85、59]
しかし、名前に基づいて対応する結果を見つけるために、2つのリストで表さ容易ではありません。
あなたが同様の組成、ルックアップテーブルの名前とスコアを関連付ける場合:
'アダム' ==> 95
'リサ' ==> 85
'バート' ==> 59
名前を考えると、あなたは直接得点を見つけたことができます。
Pythonの辞書は、このことを行うために専用されています。
辞書で意味「名前」 - 「結果」ルックアップテーブルは次のよう:
d = {
'Adam': 95,
'Lisa': 85,
'Bart': 59
}
私たちは辞書には、キー値を見つけることによってである、名前のキーと呼ばれる値を、対応する結果と呼ばれます。
中括弧{}キーをたどる、これは辞書であることを示し、そして:値は、あなたがそれを書くことができます。最後のキー:値のカンマを省略することができます。
辞書が設定されているので、lenは()関数は、任意のセットのサイズを計算することができます。
>>> len(d)
3
注:キーと値のA数、したがって、3辞書のサイズ。
タスク:
新人ポールの学生はスコアは辞書を作成し、学生の成績はポールもリストに加え、75ポイントです。
d = {
'Adam': 95,
'Lisa': 85,
'Bart': 59
}
コード:
d = {
'Adam': 95,
'Lisa': 85,
'Bart': 59,
'Paul': 75
}
2、訪問辞書
私たちは、名前と業績との対応を表すために使用される辞書を作成することができました:
d = {
'Adam': 95,
'Lisa': 85,
'Bart': 59
}
だから、どのように名前によって対応する結果、それを見つけるには?
単にことを除いて、インデックスが対応するリスト要素を返すために使用され、辞書のキーを使用している必要があり、同様に対応する値を見つけるためにDの形態[キー]で使用され、このリストされてもよいです。
>>> print d['Adam']
95
>>> print d['Paul']
Traceback (most recent call last):
File "index.py", line 11, in <module>
print d['Paul']
KeyError: 'Paul'
注:キーによる値のアクセス辞書は、限り、キーが存在するように、辞書に対応する値を返します。KeyError例外:キーが存在しない場合は、エラーを指示します。
- KeyError例外が発生回避するために、2つのオプションがあります。
- まず、キーが存在するかを決定するために、オペレータでの使用:
if 'Paul' in d:
print d['Paul']
「パウロは」が存在しない場合は文が決定Falseであれば、当然のでエラーを回避、印刷D [「ポール」]を実行しません。
- 第二は、キーが存在しない場合、それ自体が、提供getメソッドの辞書、返品なしを使用することです。
>>> print d.get('Bart')
59
>>> print d.get('Paul')
None
タスク:
以下の辞書によると:
D = {
'アダム' 95、
'リサ':85、
'バート':59}
プリントアウトしてください:
アダム:95
リサ:85
バート:59
コードを書いてから:
d = {
'Adam': 95,
'Lisa': 85,
'Bart': 59
}
print 'Adam:',d.get('Adam')
print 'Lisa:',d.get('Lisa')
print 'Bart:',d.get('Bart')
リファレンスコード:
d = {
'Adam': 95,
'Lisa': 85,
'Bart': 59
}
for key in ['Adam', 'Lisa', 'Bart']:
print "%s: %d"%(key, d[key])
3、辞書機能
- 高速検索
第1の特徴は、辞書がある高速検索にかかわらず、辞書検索速度が同じである、10個の要素または10万の要素を持っています、。検索速度のリストが徐々に要素の増加とともに減少しました。
しかし、辞書には、高速検索速度は、コスト的に不利に辞書がないわけではないされて大容量のメモリを占有するだけでなく、内容、リスト反して、小さなメモリフットプリントの多くを無駄にしますが、遅く見えます。
辞書は、辞書中で、そのため、キーによる検索ですので、キーを繰り返すことはできません。
- ストレージ障害
第二の特徴は、辞書格納されたキーと値のペアは、シーケンスを命じていないです!このリストは同じではありません。
d = {
'Adam': 95,
'Lisa': 85,
'Bart': 59 }
我々は、この辞書を印刷しようとすると:
>>> print d
{'Lisa': 85, 'Adam': 95, 'Bart': 59}
印刷順序は、必ずしも我々が作成し、順番異なる印刷機が乱れている内部辞書を示唆し、おそらく異なるれる順序ではなく、使用することはできません辞書は順序集合を保存します。
- 不変の要素
辞書第3の特徴は、文字列、整数などの不変、Pythonの基本的なタイプであるために重要な要素であり、浮動小数点数は、キーとして使用することができ、不変です。
リストは可変である。しかし、それはキーとして機能することはできません。
あなたは、エラーの種類をキーとして時にリストが報告されるかを試すことができます。
変数は問題ではない場合は、このキーだけに適用される制限値を不変:
{
'123': [1, 2, 3], # key 是 str,value是list
123: '123', # key 是 int,value 是 str
('a', 'b'): True # key 是 tuple,并且tuple的每个元素都是不可变对象,value是 boolean
}
最も一般的なキーまたは文字列は、最も便利なので、使用しています。
タスク:
辞書を設計してください、あなたが知られている結果に基づいて、スコアの名前を見つけることができます次のとおりです。
アダム:95、
リサ:85、
バート:59。
コードを書いてから:
# -*- coding: utf-8 -*-
d = {
95:'Adam',
85:'Lisa',
59:'Bart'
}
図4に示すように、更新辞書
辞書は、我々は常に辞書に新しいキーと値を追加することができます変数、です。例えば、そこのdict:
d = {
'Adam': 95,
'Lisa': 85,
'Bart': 59
}
新しい学生のポールの成果72が代入文で、リストに追加してください:
>>> d['Paul'] = 72
辞書の内容を見てください:
>>> print d
{'Lisa': 85, 'Paul': 72, 'Adam': 95, 'Bart': 59}
キーがすでに存在する場合は、割り当てが新しい値で元の値に置き換えられます。
>>> d['Bart'] = 60
>>> print d
{'Lisa': 85, 'Paul': 72, 'Adam': 95, 'Bart': 60}
タスク:
ポール・グレードに応じて、以下の72の辞書を更新してください:
D = {
95: 'アダム'、
85 'リサ'、
59 'バート'
}
コードを書いてから:
d = {
95: 'Adam',
85: 'Lisa',
59: 'Bart'
}
d[72]='Paul'
print d
5、辞書を横断
辞書が設定されているので、したがって、リストトラバーサル辞書とforループによって達成することができる、などを横切ります。
ループを直接使用することは、キーを辞書トラバースすることができます:
>>> d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }
>>> for key in d:
... print key
...
Lisa
Adam
Bart
値は、対応するキーにより取得することができるので、従って、ループの本体に、値の値を得ることができます。
タスク:
以下の辞書をループのためにしてください使用は、名前をプリントアウト:スコアが来ます。
d = {
'Adam': 95,
'Lisa': 85,
'Bart': 59
}
コードを書いてから:
d = {
'Adam': 95,
'Lisa': 85,
'Bart': 59
}
for key in d:
print key,':',d.get(key)