Pythonでは、辞書はキーを使って値を取得するデータ保存オブジェクトです。携帯電話の連絡先リストや電話帳を想像してみてください。人の名前をキーとして、電話番号を値として検索します。辞書はデータの保存や並べ替えに非常に便利です。私たちは、RSSニュースフィードを使ってWebページのコンテンツを生成する forループプロジェクトで辞書を使用しました。
辞書内のキーと値を作成、更新、削除する方法を説明し、その後、 Python とnfty.shを使用して通知システムを作成する実際のプロジェクトで辞書を使用します。
Pythonで辞書を作成する方法
辞書の最も基本的な用途はデータを保存することです。この例では、「registry」という辞書を作成し、そこに Star Trek のキャラクターの名前 (キー) と宇宙船レジストリ/番号 (値) を保存します。
1. 「registry」という空の辞書を作成します。辞書は既にデータが入っている状態で作成することもできますが、空の辞書を作成することで「白紙のキャンバス」から始めることができます。
Tom's Hardware の最高のニュースと詳細なレビューをあなたの受信箱に直接お届けします。
registry = {}
2.レジストリに名前と船番号を追加します。名前がキー、船番号が値であることを覚えておいてください。値は文字列、整数、浮動小数点数、タプル、リストのいずれかです。
registry["James T Kirk"] = 1701
3.レジストリにさらにいくつかの名前を追加します。
registry["Hikaru Sulu"] = 2000
registry["Kathryn Janeway"] = 74656
registry["Ben Sisko"] = 74205
4.レジストリ辞書の内容を印刷します。
print(registry)
5.コードを starfleet-registry.py として保存し、「実行」をクリックしてコードを開始します。
完全なコードリスト: 辞書の作成
registry = {}
registry["James T Kirk"] = 1701
registry["Hikaru Sulu"] = 2000
registry["Kathryn Janeway"] = 74656
registry["Ben Sisko"] = 74205
print(registry)
辞書内のエントリの更新と削除。
辞書は更新可能 (プログラミング用語では変更可能) であり、キー (名前) と値 (船番号) を更新できることを意味します。
最初のシナリオでは、Ben Sisko さんから電話があり、彼のエントリを Benjamin さんに更新してほしいと依頼されています。このコードを前のサンプルコードに追加します。
1.更新中であることを示すprint文を追加します。これは完全にオプションですが、この例では辞書を更新していることを明確にするためです。
print(“UPDATES”)
2. 「Benjamin Sisko」キーを追加し、「Ben Sisko」の下に保存されている値を使用するように設定します。
registry["Benjamin Sisko"] = registry["Ben Sisko"]
3.レジストリから「Ben Sisko」を削除します。
del registry["Ben Sisko"]
4.レジストリの現在の内容を出力します。「Ben Sisko」キーが削除され、「Benjamin Sisko」に置き換えられていることがわかります。値も転送されています。
print(registry)
次に、ジェームズ・T・カークのエントリを更新します。どうやら彼は新しい船体番号を持っているようです(これは、自爆アプリに「誤って」簡単なパスワードを設定してしまったことに関係しているようです)。そのため、彼のエントリの値を更新する必要があります。
1.更新中であることを示すprint文を追加します。これは完全にオプションですが、この例では辞書を更新していることを明確にするためです。
print("Kirk's new number")
2. 「James T Kirk」キーを新しい船番号で更新します。値に -A を追加しているため、文字列であることを示すために値を「 」で囲む必要があることに注意してください。
registry["James T Kirk"] = "1701-A"
3.レジストリの内容を出力します。James T Kirk に新しい船舶番号が付与されていることがわかります。
最後に、レジストリからベンジャミン・シスコを削除する必要があります。どうやら彼はバジョールの火の洞窟で「行方不明」になったようです。そのため、レジストリから彼のエントリを削除する必要があります。既存のコードを使用し、3行追加します。
1.エントリを削除していることを示すprint文を追加します。これは完全にオプションですが、この例では辞書からエントリを削除していることを明確にするためです。
print("Deleting Benjamin Sisko")
2. 「ベンジャミン・シスコ」をレジストリから削除する。新しい船長が誰になるかはまだ分からない。
del registry["Benjamin Sisko"]
3.レジストリを印刷して削除を確認します。
print(registry)
4.コードを保存して実行します。
完全なコードリスト: 辞書の更新と削除
registry = {}
registry["James T Kirk"] = 1701
registry["Hikaru Sulu"] = 2000
registry["Kathryn Janeway"] = 74656
registry["Ben Sisko"] = 74205
print(registry)
print("UPDATES")
registry["Benjamin Sisko"] = registry["Ben Sisko"]
del registry["Ben Sisko"]
print(registry)
print("Kirk's new ship")
registry["James T Kirk"] = "1701-A"
print(registry)
print("Deleting Benjamin Sisko")
del registry["Benjamin Sisko"]
print(registry)
辞書でForループを使用する
forループは素晴らしいです。オブジェクトを反復処理し、処理中にデータを取得できます。既存のコード例でforループを使って、名前(キー)を反復処理し、各船長の名前と船番号を出力してみましょう。
1.レジストリ辞書内のキーと値を反復処理するforループを作成します。このループは辞書内のすべての項目を反復処理し、ループが実行されるたびに現在のキーと値を保存します。
for keys, values in registry.items():
2.船長の名前(キー)と船の番号/登録番号(値)を埋め込んだ文を作成します。
print("Captain", keys, "registry is", values)
3.コードを保存し、「実行」をクリックします。Pythonシェルの下部に、各船長の名前と船番号が表示されます。
完全なコードリスト: 辞書を使ったForループの使用
registry = {}
registry["James T Kirk"] = 1701
registry["Hikaru Sulu"] = 2000
registry["Kathryn Janeway"] = 74656
registry["Ben Sisko"] = 74205
print(registry)
print("UPDATES")
registry["Benjamin Sisko"] = registry["Ben Sisko"]
del registry["Ben Sisko"]
print(registry)
print("Kirk's new ship")
registry["James T Kirk"] = "1701-A"
print(registry)
print("Deleting Benjamin Sisko")
del registry["Benjamin Sisko"]
print(registry)
for keys, values in registry.items():
print("Captain", keys, "registry is", values)
実際のプロジェクトでの辞書の使用
基本を学んだので、次は実際のプロジェクトで辞書を使ってみましょう。AndroidとiOSデバイスに通知を送信するサービス、 ntfy.shを使用します。ntfy.shのPython APIは辞書に基づいています。ntfy.shへのメッセージ送信はPythonのrequestsモジュールを使って処理されるため、Pythonのインストールファイルは不要です。
1. Android / iOS デバイスにntfy.sh をインストールします。
2.アプリを開き、「+」をクリックして新しいサブスクリプションを作成します。
3. 新しいトピックを作成し、「購読」をクリックします。今回はth-testを使用しました。ご自身に合ったトピックを作成してください。トピックはパスワード保護されていない場合があるため、機密性の高いデータは送信しないでください。
4.デバイスで アプリを開いたままにしておきます。
ここで、Thonny を実行している PC に注目します。
5.空のファイルを作成します。
6.リクエストモジュールをインポートします。これは、ネットワーク接続の送受信用に設計された、事前に記述されたPythonコードのモジュールです。
import requests
7. ntfyにメッセージを投稿するには、requestsを使用します。関数の引数の一部としてトピック名(この場合はhttps://ntfy.sh/th-test)を指定する必要があることに注意してください。次の引数 data は、ユーザーに表示されるテキストです。しかし、ここで注目すべきは「headers」です。これは複数のエントリを含むことができる辞書型です。現在は通知のタイトルが含まれています。
requests.post("https://ntfy.sh/th-test", data="This is a test of ntfy for Tom's Hardware", headers={ "Title": "Python Dictionaries are useful" })
8.コードをdictionary-ntfy.pyとして保存し、「実行」をクリックします。これにより、メッセージがntfyのサーバーに送信され、そこからデバイスに通知が表示されます。
完全なコードリスト: 実際のプロジェクト
import requests
requests.post("https://ntfy.sh/th-test", data="This is a test of ntfy for Tom's Hardware",
headers={ "Title": "Python Dictionaries are useful" })
高度な現実世界辞書プロジェクト
より高度なプロジェクト、つまり辞書を使って複数の項目を格納するプロジェクトを作成してみましょう。以前のコードを再利用しますが、ニーズに合わせて調整します。
1.インポートとリクエストのラインは同じままです。
import requests
requests.post("https://ntfy.sh/th-test",
2.ファイルを開いてメモリに読み込みます。これが通知で送信されるデータです。今回は、コードと同じディレクトリにある画像から始めます。画像がマシン上の別の場所にある場合は、ファイルへのフルパスを指定してください。
data=open("yoga.jpg", 'rb'),
3. 「headers」という辞書を作成します。これは通知で送信される情報を形成します。
headers={
4.ヘッダー辞書内で、次のキーと値を指定します。
優先度 5 のメッセージは緊急であり、最も優先度が高く、応答されるまで携帯電話が継続的に振動/着信するように設定されます。
タグ: 通知にアイコンや追加データを追加するために使用する絵文字とタグです。タグに絵文字が含まれている場合は、表示されます。
タイトル: 通知の上部のタイトル(太字)。
クリック: 通知をクリックすると、Web ページが開きます。
ファイル名: 送信されるファイルの名前。
"Priority": "5", "Tags": "rotating_light", "Title": "Let me in, it is cold!!", "Click": "https://www.tomshardware.com/reviews/elecfreaks-cm4-xgo", "Filename": "yoga.jpg" })
5.コードを保存し、「実行」をクリックします。デバイスにカスタムメッセージを示す通知が表示されます。
完全なコードリスト: 高度なプロジェクト
import requests
requests.post("https://ntfy.sh/th-test", data=open("yoga.jpg", 'rb'), headers={ "Priority": "5", "Tags": "rotating_light", "Title": "Let me in, it is cold!!", "Click": "https://www.tomshardware.com/reviews/elecfreaks-cm4-xgo", "Filename": "yoga.jpg"
})
その他のPythonチュートリアル
- Windows 10と11にPythonをインストールする方法
- PythonでForループを使う方法
- Pythonで列挙する方法
- Pythonで実行可能なアプリケーションを作成する方法
- Pythonで画像から背景を削除する方法
- Python、HTML、ThonnyでWebアプリを作成する方法
- Raspberry Pi カメラモジュール 3 を Python コードで使う方法