Python3の辞書を理解する

提供:Dev Guides
移動先:案内検索

序章

辞書は、Pythonに組み込まれているマッピングタイプです。 辞書はキーにマップし、これらのキーと値のペアはPythonでデータを保存するための便利な方法を提供します。

IDやユーザープロファイルに含まれる情報など、関連するデータを保持するために通常使用される辞書は、両側に中括弧{}で構成されます。

情報:このチュートリアルのサンプルコードに従うには、python3コマンドを実行して、ローカルシステムでPythonインタラクティブシェルを開きます。 次に、>>>プロンプトの後に例を追加して、例をコピー、貼り付け、または編集できます。


辞書は次のようになります。

sammy = {'username': 'sammy-shark', 'online': True, 'followers': 987}

中括弧に加えて、辞書全体にコロン(:)もあります。

コロンの左側の単語がキーです。 キーは、任意の不変のデータ型で構成できます。 上記の辞書のキーは次のとおりです。

  • 'username'
  • 'online'
  • 'followers'

上記の例の各キーは、stringの値です。

コロンの右側の単語は値です。 は、任意のデータ型で構成できます。 上記の辞書の値は次のとおりです。

  • 'sammy-shark'
  • True
  • 987

これらの各値は、文字列、ブール値、または整数のいずれかです。

辞書を印刷してみましょうsammy

print(sammy)
Output{'username': 'sammy-shark', 'followers': 987, 'online': True}

出力を見ると、キーと値のペアの順序がずれている可能性があります。 Pythonバージョン3.5以前では、辞書のデータ型は順序付けられていません。 ただし、Pythonバージョン3.6以降では、ディクショナリデータ型は順序付けられたままです。 辞書が順序付けられているかどうかに関係なく、キーと値のペアはそのまま残り、それらの関係の意味に基づいてデータにアクセスできるようになります。

前提条件

Python 3をインストールし、コンピューターまたはサーバーにプログラミング環境をセットアップする必要があります。 プログラミング環境をセットアップしていない場合は、ローカルプログラミング環境またはサーバー上のプログラミング環境のインストールおよびセットアップガイドを参照して、オペレーティングに適したものにすることができます。システム(Ubuntu、CentOS、Debianなど)

辞書要素へのアクセス

関連するキーを参照することで、辞書の値を呼び出すことができます。

キーを使用したデータ項目へのアクセス

辞書はデータを格納するためのキーと値のペアを提供するため、Pythonプログラムの重要な要素になる可能性があります。

サミーのユーザー名を分離したい場合は、sammy['username']を呼び出すことで分離できます。 それを印刷してみましょう:

print(sammy['username'])
Outputsammy-shark

辞書は、リストの場合のように整数を呼び出して特定のインデックス値を取得する代わりに、キーに値を割り当て、そのキーを呼び出して関連する値を取得できるという点で、データベースのように動作します。

キー'username'を呼び出すことにより、そのキーの値である'sammy-shark'を受け取ります。

sammyディクショナリの残りの値は、同じ形式を使用して同様に呼び出すことができます。

sammy['followers']
# Returns 987

sammy['online']
# Returns True

辞書のキーと値のペアを利用することで、キーを参照して値を取得できます。

メソッドを使用して要素にアクセスする

キーを使用して値にアクセスすることに加えて、いくつかの組み込みメソッドを使用することもできます。

  • dict.keys()はキーを分離します
  • dict.values()は値を分離します
  • dict.items()は、(key, value)タプルペアのリスト形式でアイテムを返します

キーを返すには、dict.keys()メソッドを使用します。 この例では、変数名を使用し、sammy.keys()になります。 それをprint()メソッドに渡して、出力を見てみましょう。

print(sammy.keys())
Outputdict_keys(['followers', 'username', 'online'])

dict_keysクラスの反復可能なビューオブジェクト内にキーを配置する出力を受け取ります。 次に、キーがリスト形式で印刷されます。

このメソッドは、辞書間でクエリを実行するために使用できます。 たとえば、2つの辞書データ構造間で共有される共通キーを確認できます。

sammy = {'username': 'sammy-shark', 'online': True, 'followers': 987}
jesse = {'username': 'JOctopus', 'online': False, 'points': 723}

for common_key in sammy.keys() & jesse.keys():
    print(sammy[common_key], jesse[common_key])

辞書sammyと辞書jesseは、それぞれユーザープロファイル辞書です。

ただし、サミーにはフォロワーが関連付けられたソーシャルプロファイルがあり、ジェシーにはポイントが関連付けられたゲームプロファイルがあるため、プロファイルには異なるキーがあります。 それらに共通する2つのキーは、usernameonlineステータスです。これらは、この小さなプログラムを実行するとわかります。

Outputsammy-shark JOctopus
True False

確かにプログラムを改善して出力をよりユーザーが読みやすくすることはできますが、これはdict.keys()を使用してさまざまな辞書をチェックし、それらが共通しているかどうかを確認できることを示しています。 これは、大きな辞書に特に役立ちます。

同様に、dict.values()メソッドを使用して、sammy.values()として作成されるsammyディクショナリの値をクエリできます。 それらを印刷してみましょう:

sammy = {'username': 'sammy-shark', 'online': True, 'followers': 987}

print(sammy.values())
Outputdict_values([True, 'sammy-shark', 987])

メソッドkeys()values()はどちらも、dict_keysと[のビューオブジェクトを持つsammyディクショナリに存在するキーと値のソートされていないリストを返します。 X165X]それぞれ。

辞書のすべての項目に関心がある場合は、items()メソッドを使用してそれらにアクセスできます。

print(sammy.items())
Outputdict_items([('online', True), ('username', 'sammy-shark'), ('followers', 987)])

返される形式は、(key, value)タプルペアとdict_itemsビューオブジェクトで構成されるリストです。

forループを使用して、返されたリスト形式を反復処理できます。 たとえば、特定の辞書の各キーと値を印刷してから、文字列を追加することで、より人間が読める形式にすることができます。

for key, value in sammy.items():
    print(key, 'is the key for the value', value)
Outputonline is the key for the value True
followers is the key for the value 987
username is the key for the value sammy-shark

上記のforループは、sammyディクショナリ内の項目を繰り返し、人間が理解しやすいように情報とともにキーと値を1行ずつ出力しました。

組み込みのメソッドを使用して、辞書のデータ構造からアイテム、値、およびキーにアクセスできます。

辞書の変更

辞書は変更可能なデータ構造であるため、変更することができます。 このセクションでは、辞書要素の追加と削除について説明します。

辞書要素の追加と変更

メソッドや関数を使用せずに、次の構文を使用してキーと値のペアをディクショナリに追加できます。

dict[key] = value

usernamesという辞書にキーと値のペアを追加することにより、これが実際にどのように機能するかを見ていきます。

usernames = {'Sammy': 'sammy-shark', 'Jamie': 'mantisshrimp54'}

usernames['Drew'] = 'squidly'

print(usernames)
Output{'Drew': 'squidly', 'Sammy': 'sammy-shark', 'Jamie': 'mantisshrimp54'}

これで、辞書が'Drew': 'squidly'キーと値のペアで更新されたことがわかります。 辞書は順序付けられていない可能性があるため、このペアは辞書出力のどこにでも発生する可能性があります。 プログラムファイルの後半でusernamesディクショナリを使用すると、追加のキーと値のペアが含まれます。

さらに、この構文は、キーに割り当てられた値を変更するために使用できます。 この場合、既存のキーを参照し、それに別の値を渡します。

特定のネットワーク上のユーザーの1人である辞書drewについて考えてみましょう。 このユーザーは今日フォロワーが増えたと言うので、'followers'キーに渡された整数値を更新する必要があります。 print()関数を使用して、辞書が変更されたことを確認します。

drew = {'username': 'squidly', 'online': True, 'followers': 305}

drew['followers'] = 342

print(drew)
Output{'username': 'squidly', 'followers': 342, 'online': True}

出力では、フォロワーの数が305の整数値から342にジャンプしたことがわかります。

この方法を使用して、ユーザー入力を使用してキーと値のペアを辞書に追加できます。 コマンドラインで実行され、ユーザーからの入力で名前と関連するユーザー名を追加できる簡単なプログラムusernames.pyを作成してみましょう。

usernames.py

# Define original dictionary
usernames = {'Sammy': 'sammy-shark', 'Jamie': 'mantisshrimp54'}

# Set up while loop to iterate
while True:

    # Request user to enter a name
    print('Enter a name:')

    # Assign to name variable
    name = input()

    # Check whether name is in the dictionary and print feedback
    if name in usernames:
        print(usernames[name] + ' is the username of ' + name)

    # If the name is not in the dictionary...
    else:

        # Provide feedback        
        print('I don\'t have ' + name + '\'s username, what is it?')

        # Take in a new username for the associated name
        username = input()

        # Assign username value to name key
        usernames[name] = username

        # Print feedback that the data was updated
        print('Data updated.')

コマンドラインでプログラムを実行してみましょう。

python usernames.py

プログラムを実行すると、次のような出力が得られます。

OutputEnter a name:
Sammy
sammy-shark is the username of Sammy
Enter a name:
Jesse
I don't have Jesse's username, what is it?
JOctopus
Data updated.
Enter a name:

プログラムのテストが終了したら、CTRL + Cを押してプログラムをエスケープできます。 コードを改善するために、条件文を使用してプログラムを終了するトリガー(文字qの入力など)を設定できます。

これは、辞書をインタラクティブに変更する方法を示しています。 この特定のプログラムでは、CTRL + Cでプログラムを終了するとすぐに、ファイルの読み取りと書き込みを処理する方法を実装しない限り、すべてのデータが失われます。

dict.update()メソッドを使用して、辞書を追加および変更することもできます。 これは、リストで使用可能なappend()メソッドとは異なります。

以下のjesse辞書で、キー'followers'を追加し、jesse.update()で整数値を指定しましょう。 続いて、更新された辞書をprint()しましょう。

jesse = {'username': 'JOctopus', 'online': False, 'points': 723}

jesse.update({'followers': 481})

print(jesse)
Output{'followers': 481, 'username': 'JOctopus', 'points': 723, 'online': False}

出力から、'followers': 481キーと値のペアがディクショナリjesseに正常に追加されたことがわかります。

dict.update()メソッドを使用して、特定のキーの特定の値を置き換えることにより、既存のキーと値のペアを変更することもできます。

sammy辞書でSammyのオンラインステータスをTrueからFalseに変更しましょう。

sammy = {'username': 'sammy-shark', 'online': True, 'followers': 987}

sammy.update({'online': False})

print(sammy)
Output{'username': 'sammy-shark', 'followers': 987, 'online': False}

sammy.update({'online': False})は、既存のキー'online'を参照し、そのブール値をTrueからFalseに変更します。 print()辞書を呼び出すと、出力で更新が行われていることがわかります。

辞書に項目を追加したり、値を変更したりするには、dict[key] = value構文またはメソッドdict.update()のいずれかを使用できます。

辞書要素の削除

キーと値のペアを追加し、ディクショナリデータ型内の値を変更できるのと同様に、ディクショナリ内のアイテムを削除することもできます。

辞書からキーと値のペアを削除するには、次の構文を使用します。

del dict[key]

ユーザーの1人を表すjesse辞書を見てみましょう。 Jesseはゲームをプレイするためにオンラインプラットフォームを使用しなくなったため、'points'キーに関連付けられているアイテムを削除します。 次に、辞書を印刷して、アイテムが削除されたことを確認します。

jesse = {'username': 'JOctopus', 'online': False, 'points': 723, 'followers': 481}

del jesse['points']

print(jesse)
Output{'online': False, 'username': 'JOctopus', 'followers': 481}

del jesse['points']は、jesseディクショナリからキーと値のペア'points': 723を削除します。

すべての値の辞書をクリアしたい場合は、dict.clear()メソッドを使用してクリアできます。 これにより、プログラムの後半で使用する必要がある場合に備えて、特定の辞書が保持されますが、アイテムは含まれなくなります。

jesseディクショナリ内のすべてのアイテムを削除しましょう。

jesse = {'username': 'JOctopus', 'online': False, 'points': 723, 'followers': 481}

jesse.clear()

print(jesse)
Output{}

出力は、キーと値のペアがない空の辞書があることを示しています。

特定の辞書が不要になった場合は、delを使用して完全に削除できます。

del jesse

print(jesse)

jesseディクショナリを削除した後にprint()を呼び出すと、次のエラーが発生します。

Output...
NameError: name 'jesse' is not defined

辞書は変更可能なデータ型であるため、追加、変更、およびアイテムの削除とクリアを行うことができます。

結論

このチュートリアルでは、Pythonの辞書データ構造について説明しました。 ディクショナリはキーと値のペアで構成されており、インデックスに依存せずにデータを格納する方法を提供します。 これにより、他のデータ型との意味や関係に基づいて値を取得できます。

ここから、「データ型について」チュートリアルで他のデータ型について詳しく知ることができます。

Scrapyを使用したWebスクレイピングなどのプログラミングプロジェクトで使用される辞書データ型を確認できます。