\r\n\r\n
Pythonの辞書はデータ構造であり、他のプログラミング言語における連想配列に類似しています。配列やリストが、位置によって要素をインデックス化する。一方、辞書は、文字列をキーとして要素をインデックス化する。辞書は、キーと値のペアの順不同なセットと考えることができる。
今回は、pythonの辞書の使い方を紹介します。
Pythonの辞書を作成するにはいくつかの方法があります。最も簡単な方法は、JSONに似た構文で、中括弧を使って初期化することです。
users = {'firstname': 'John', 'lastname': 'Smith', 'age': 27}ただし、浮動小数点数は近似値として保存されるため、キーとして使用する場合は注意が必要です。
rain_percent = { 1980: '17%', 1981: '15%', 1982: '10%'}print rain_percentprint rain_percent[1980]# prints{1980: '17%', 1981: '15%', 1982: '10%'}17%また、dict()コンストラクタのキーワード引数として、名前と値のペアを使用して辞書の作成と初期化が可能です。
population = dict(California=37253956, Colorado=5029196, Connecticut=3574097, Delaware=897934)print population# prints{'Connecticut': 3574097, 'Delaware': 897934, 'California': 37253956, 'Colorado': 5029196}辞書を作成するもう一つの方法は、キーと値を持つタプルの配列を使用することである。以下は、上記と同じ例である。
pairs = [('California', 37253956), ('Colorado', 5029196), ('Connecticut', 3574097), ('Delaware', 897934)]population = dict(pairs)print population# prints{'Connecticut': 3574097, 'Delaware': 897934, 'California': 37253956, 'Colorado': 5029196}Dict comprehensionは、キーに基づいた値を計算できる場合、dictを初期化するためのクールな構文を提供します。以下は、一連の数値と二乗した値のディクショ ンを初期化するものである。
print {x: x**2 for x in xrange(10, 20)}# prints{10: 100, 11: 121, 12: 144, 13: 169, 14: 196, 15: 225, 16: 256, 17: 289, 18: 324, 19: 361}どのように機能するのですか?後者の部分(for x in xrange (10, 20))は,指定された範囲の数値を返す。 dictは,この部分({x:x**2...})を理解する。この範囲をループし、辞書を初期化する。
辞書を作成したら、その辞書で何ができるかというと、要素にアクセスしたり、値を更新したり、要素を削除したりすることができるのです。
dictの要素にアクセスするには、配列やリストと同じように括弧内のキーを使用します。
print population['Delaware']# prints897934キーが数値の場合、逆コンマは必要ない。この場合、式はリストまたは配列のインデックスのように見える。
print rain_percent[1980]# prints17%キーにアクセスする際の型は、Pythonの辞書に格納されているものと一致しなければならない。保存キーが数値、アクセスキーが文字列のため、以下のようにするとエラーになります。
x = '1980'print rain_percent[x]# results in 1 x = '1980'----> 2 print rain_percent[x]KeyError: '1980'存在しないキーにアクセスすることはエラーとなります。
rain_percent = { 1980: '17%', 1981: '15%', 1982: '10%'}print rain_percent[1983]# prints 1 rain_percent = { 1980: '17%', 1981: '15%', 1982: '10%'}----> 2 print rain_percent[1983]KeyError: 1983マッピングが存在しない場合にキーにアクセスしてデフォルト値を提供するには、 2 番目のパラメータとしてデフォルト値を指定した get() メソッドを使用します。
print rain_percent.get(1985, '0%')# prints0%実際にキーにアクセスすることなく、キーの存在を確認したい場合はどうすればよいでしょうか(上記のようなキーエラーに遭遇する可能性もあります)。in キーワードは、ブーリアン値を返す dct フォーマットキーで使用することができます。
print 1980 in rain_percentprint '1980' in rain_percent# printsTrueFalseformat key not in dct を使って、条件を反転させる(つまり、Python の辞書にないキーであることを確認する)。これは、dctのキーではなく、pythonの標準的な否定と同等です。
print 1980 not in rain_percentprint 1985 not in rain_percent# printsFalseTrue必要なキーに割り当てて、値を変更します。
users = {'firstname': 'John', 'lastname': 'Smith', 'age': 27}users['age'] = 29print users# prints{'lastname': 'Smith', 'age': 29, 'firstname': 'John'}Python辞書に新しいマッピングを追加するには、同じ構文を使用します。
users['dob'] = '15-sep-1971'print users# prints{'dob': '15-sep-1971', 'lastname': 'Smith', 'age': 29, 'firstname': 'John'}Update()メソッドを使用すると、辞書の複数の要素を一度に更新することができます。
users = {'firstname': 'John', 'lastname': 'Smith', 'age': 27}users.update({'age': 29, 'dob': '15-sep-1971'})print users# prints{'dob': '15-sep-1971', 'lastname': 'Smith', 'age': 29, 'firstname': 'John'}setdefault() を使用して、キーのデフォルト値を設定します。マッピングが存在しない場合、このメソッドはキーの値を設定し、現在の値を返します。
# does not change current valueprint users.setdefault('firstname', 'Jane')# printsJohn# sets valueprint users.setdefault('city', 'NY')# printsNY# Final valueprint users# prints{'lastname': 'Smith', 'age': 27, 'firstname': 'John', 'city': 'NY'}辞書からマッピングを削除するには、delオペレータを使用します。このオペレータは何も返しません。
キーが辞書に存在しない場合、キーエラーとなる。
users = {'firstname': 'John', 'lastname': 'Smith', 'age': 27}del users['age']print users# prints{'lastname': 'Smith', 'firstname': 'John'}削除された値を返したい場合は、代わりに pop() メソッドを使用します。
users = {'firstname': 'John', 'lastname': 'Smith', 'age': 27}print users.pop('age')print users# prints27{'lastname': 'Smith', 'firstname': 'John'}エラーが発生せずにキーが存在する場合は削除し、存在しない場合はどうするのでしょうか?pop()を使用し、2番目のパラメータにNoneを指定すると、以下のようになります。
users = {'firstname': 'John', 'lastname': 'Smith', 'age': 27}users.pop('foo', None)print users# prints{'lastname': 'Smith', 'age': 27, 'firstname': 'John'}以下は、存在しないキーに対してエラーを起こさない、辞書からキーの文字列を削除する1行の手順である。
users = {'firstname': 'John', 'lastname': 'Smith', 'age': 27, 'dob': '15-sep-1971'}map(lambda x : users.pop(x, None),['age', 'foo', 'dob'])print users辞書からすべてのキーを削除するには、clear() メソッドを使用します。
users = {'firstname': 'John', 'lastname': 'Smith', 'age': 27}users.clear()print users# prints{}Pythonは、辞書の項目をループする方法をいくつか提供しています; あなたのニーズに合ったものを選んでください。
以下のメソッドでは、Pythonの様々な辞書情報を配列の形で抽出する方法を説明します。生成された配列は、通常のpythonの構成でループさせることができます。ただし、辞書のサイズによっては、返される配列が非常に大きくなる可能性があることに留意してほしい。その結果、これらの配列を扱うと、上記のイテレータメソッドを使うよりも(メモリ的に)高くつく場合があります。
これらの配列を使用してもよい状況の1つは、不要な要素が発生し、その項目を辞書から削除する必要がある場合である。辞書を修正する際にイテレータを使用すると、ランタイムエラーが発生する場合があります。
今回は、python辞書の代表的なユースケースを紹介しようと思います。PythonのTipsについては、他のPython記事もぜひご覧ください。他にもこんなユースケースがあったら、ぜひコメントで教えてください。
画像引用元:viper345/Shutterstock