\r\n\r\n

Python辞書:より良いコードを書くための使い方

Pythonの辞書は、キーと値のペアの順序不同のセットと考えることができます。今回は、その使い方を説明し、pythonコードの改善に役立てる...

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...})を理解する。この範囲をループし、辞書を初期化する。

Python辞書の使用

辞書を作成したら、その辞書で何ができるかというと、要素にアクセスしたり、値を更新したり、要素を削除したりすることができるのです。

Python辞書の要素にアクセスする

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# printsTrueFalse

format 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は、辞書の項目をループする方法をいくつか提供しています; あなたのニーズに合ったものを選んでください。

ループキー

  • キー(と場合によっては値)を順番に処理する最も簡単な方法は、次のようなループを使うことです: users = {'firstname': 'John', 'lastname': 'Smith', 'age': 27}for k in users: print k, '=>', users[k]# printslastname => Smithage => 27firstname => John
  • iterkeys()というメソッドを使っても、上記と全く同じように動作します。users = {'firstname': 'John', 'lastname': 'Smith', 'age': 27}for k in users.iterkeys(): print k, '=>', users[k]# printslastname => Smithage => 27firstname => John
  • users = {'firstname': 'John', 'lastname': 'Smith', 'age': 27}for k in iter(users): print k, '=>', users[k]# printslastname => Smithage => 27firstname => John
  • 処理中のキーのインデックスが必要な場合は、図のようにenumerate()組み込み関数を使います。 users = {'firstname': 'John', 'lastname': 'Smith', 'age': 27}for index, key in enumerate(users): print index, key, '=>', users[k]# prints0 lastname => John1 age => John2 firstname => John

キーと値のペアをループする

  • users = {'firstname': 'John', 'lastname': 'Smith', 'age': 27}for k, v in users.iteritems(): print k, '=>', v# printslastname => Smithage => 27firstname => John

イテレーション値

  • itervalues()メソッドを使用すると、辞書内のすべての値に対して反復処理を行うことができます。この方法は、values()を使ったループと似ていますが、一度にすべての値を抽出しないので、より効率的です。 users = {'firstname': 'John', 'lastname': 'Smith', 'age': 27}for value in users.itervalues(): print value# printsSmith27John

配列の取り出し

以下のメソッドでは、Pythonの様々な辞書情報を配列の形で抽出する方法を説明します。生成された配列は、通常のpythonの構成でループさせることができます。ただし、辞書のサイズによっては、返される配列が非常に大きくなる可能性があることに留意してほしい。その結果、これらの配列を扱うと、上記のイテレータメソッドを使うよりも(メモリ的に)高くつく場合があります。

これらの配列を使用してもよい状況の1つは、不要な要素が発生し、その項目を辞書から削除する必要がある場合である。辞書を修正する際にイテレータを使用すると、ランタイムエラーが発生する場合があります。

  • items() メソッドは、key-value タプルの配列を返す。users = {'firstname': 'John', 'lastname': 'Smith', 'age': 27}for k, v in users.items(): print k, '=>', v# printslastname => Smithage => 27firstname => John
  • users = {'firstname': 'John', 'lastname': 'Smith', 'age': 27}print users.keys()# prints['lastname', 'age', 'firstname']used the returns array to loop over the keys. for k in users.keys(): print k, '=>', users[k]# printslastname => Smithage => 27firstname => John
  • 同様に、メソッド values() を使って、辞書に登録されているすべての値を取得します。 for value in users.values(): print value# printsSmith27John

Python辞書の使い方を教えてください。

今回は、python辞書の代表的なユースケースを紹介しようと思います。PythonのTipsについては、他のPython記事もぜひご覧ください。他にもこんなユースケースがあったら、ぜひコメントで教えてください。

画像引用元:viper345/Shutterstock

あなたが興味を持っているかもしれない記事

匿名者
匿名者

0 件の投稿

作家リスト

  1. admin 0 投稿
  2. 匿名者 0 投稿

おすすめ