『Pythonプログラミング入門から実践へ』Day 05を読む

7044 ワード

第六章
1、簡単な辞書
alien_0 = {'color': 'green', 'points': '5'}
print(alien_0['color'])
print(alien_0['points'])
#   :
green
5

2、辞書を使う
Pythonでは、辞書は一連のキー-値ペアです.各キーは1つの値に関連付けられており、キーを使用して関連する値にアクセスできます.キーに関連付けられた値は、数値、文字列、リスト、辞書であってもよく、実際には、辞書の値としてPythonオブジェクトを使用することができます.Pythonでは、辞書はカッコ{}に置かれた一連のキー値ペアで表されます.キー-値ペアは2つの値に関連付けられています.キーを指定すると、Pythonはそれに関連付けられた値を返します.キーと値の間はコロンで区切られ、キー-値ペアの間はカンマで区切られ、辞書には任意の数のキー-値ペアが格納されます.
(1)辞書の値へのアクセス
キーに関連付けられた値を取得するには、辞書名と角カッコ内のキーを順に指定します.冒頭の例のように.
(2)キーの追加-値ペア
ディクショナリは、キーと値のペアをいつでも追加できる動的構造です.キー-値ペアを追加するには、辞書名、角カッコで囲まれたキー、および関連する値を順に指定します.次のようになります.
alien_0 = {'color': 'green', 'points': '5'}
print(alien_0)
alien_0['x_position'] = 0
alien_0['y_position'] = 25
print(alien_0)
#   :
{'color': 'green', 'points': '5'}
{'color': 'green', 'points': '5', 'x_position': 0, 'y_position': 25}

キー値ペアの配列順序は、追加順序とは異なることに注意してください.Pythonはキー-値ペアの追加順序に関心を持たず,キーと値の関連関係にのみ関心を持つ.
(3)まず空の辞書を作成する
空の辞書を作成するには、空のカッコのペアを使用します.その後、キーと値のペアを別々に追加します.
alien_0 = {}
print(alien_0)
alien_0['color'] = 'green'
alien_0['points'] = 5
print(alien_0)
#   :
{}
{'color': 'green', 'points': 5}

ディクショナリを使用してユーザーが提供したデータを格納したり、大量のキー値ペアを自動的に生成できるコードを記述したりする場合は、通常、空のディクショナリを定義する必要があります.
(4)辞書の値の変更
ディクショナリの値を変更するには、ディクショナリ名、四角カッコで囲まれたキー、およびそのキーに関連付けられた新しい値を順に指定します.色を緑から黄色に変更するには、次の手順に従います.
alien_0 = {'color': 'green'}
print(alien_0)
alien_0['color'] = 'yellow'
print(alien_0)
#   :
{'color': 'green'}
{'color': 'yellow'}

(5)キーを削除-値ペア
辞書に不要な情報については、del文を使用して、対応するキー値ペアを完全に削除します.del文を使用する場合は、辞書名と削除するキーを指定する必要があります.削除されたキー-値のペアは永遠に消えます.
alien_0 = {'color': 'green', 'points': 5}
print(alien_0)
del alien_0['points']
print(alien_0)
#   :
{'color': 'green', 'points': 5}
{'color': 'green'}

(6)類似オブジェクトからなる辞書
上記の各例では、辞書は1つのオブジェクトの複数の情報を格納しているが、辞書は複数のオブジェクトの同一の情報を格納するために使用されてもよい.次のようになります.
favorite_languages = {
    'jen': 'Python',
    'sarah': 'C',
    'edward': 'Ruby',
    'phil': 'Python',
    }

複数行を使用して辞書を定義した後、右カッコの前にキー値と同じインデントを追加します.もう1つの良い方法は、最後のキー-値ペアの後ろにカンマを付けて、次の行にキー-値を追加する準備をすることです.
3、辞書を巡る
Pythonは辞書の遍歴をサポートしています.辞書は様々な方法で情報を格納するために使用できるため、辞書のすべてのキー-値ペア、キー、または値を巡回する方法がいくつかあります.
(1)すべてのキー-値ペアを巡回する
user_0 = {
    'username': 'efermi',
    'first': 'enrico',
    'last': 'fermi',
    }
for key, value in user_0.items():
    print('key: ' + key)
    print('value: ' + value)
#   :
key: username
value: efermi
key: first
value: enrico
key: last
value: fermi

辞書を巡るforループを記述し、キー-値ペアのキーと値を格納する2つの変数を宣言します.変数の名前は任意であってもよいが、一定の記述性を有することが望ましい.for文の第2の部分には、キー値ペアのリストを返す辞書名とメソッドitems()が含まれています.辞書を巡回する場合でも、キー値ペアの戻り順は格納順序とは異なります.
(2)辞書内のすべてのキーを巡回
辞書の値を使用する必要がない場合、keys()を使用して辞書のすべてのキーを巡回できます.
favorite_languages = {
    'jen': 'Python',
    'sarah': 'C',
    'edward': 'Ruby',
    'phil': 'Python',
    }
for name in favorite_languages.keys():
    print(name.title())
#   :
Jen
Sarah
Edward
Phil

辞書を巡回すると、すべてのキーがデフォルトで巡回されるため、上記のコードのfor name in favorite_languages.keys():for name in favoriteに置き換えるLanguages:出力は変わりません.メソッドkeys()は、遍歴にのみ使用できるわけではありません.実際には、辞書に複数のキーが含まれているリストを返します.
(3)辞書内のすべてのキーを順番に巡回する
ディクショナリは常にキーと値の関連関係を明確に記録しますが、ディクショナリの要素を取得する場合、順序を取得する場合は予測できません.特定の順序で要素を返す場合は、forループで返されたキーをソートします.
favorite_languages = {
    'jen': 'Python',
    'sarah': 'C',
    'edward': 'Ruby',
    'phil': 'Python',
    }
for name in sorted(favorite_languages.keys()):
    print(name.title())
#   :
Edward
Jen
Phil
Sarah

(4)辞書内のすべての値を巡回する
メソッドvalues()は、辞書内のすべての値を巡回し、キーを含まないリストを返します.
favorite_languages = {
    'jen': 'Python',
    'sarah': 'C',
    'edward': 'Ruby',
    'phil': 'Python',
    }
for language in set(favorite_languages.values()):
    print(language)
#   :
Python
Ruby
C

抽出された辞書の値には、重複する値がいくつかあることがわかりますので、重複項目を取り除くために、ここではメソッドset()を使用して、Pythonにリスト内のユニークな要素を見つけて、これらの要素を使用してセットを作成することができます.
4、入れ子
一連の辞書をリストに格納したり、リストを値として辞書に格納したり、辞書を値として辞書に格納したりする必要がある場合があります.これをネストと呼びます.
(1)辞書リスト
辞書を要素としてリストに保存します.
alien_0 = {'color': 'green', 'points': 5}
alien_1 = {'color': 'yellow', 'points': 10}
alien_2 = {'color': 'red', 'points': 15}
aliens = [alien_0, alien_1, alien_2]
for alien in aliens:
    print(alien)
#   :
{'color': 'green', 'points': 5}
{'color': 'yellow', 'points': 10}
{'color': 'red', 'points': 15}

ここではまず3つのキーのような辞書を作成し、1つのリストに格納し、forループで出力します.
(2)辞書にリストを格納する
pizza = {
    'crust': 'thick',
    'toppings': ['mushrooms', 'extra cheese'],
    }
print("You ordered a " + pizza['crust'] + "-crust pizza " +
      "with the following toppings:")
for topping in pizza['toppings']:
    print('\t' + topping)
#   :
You ordered a thick-crust pizza with the following toppings:
    mushrooms
    extra cheese

ここでのピザの具はリストであり、キー「toppings」に関連付けられた値として辞書に格納されます.リストと辞書のネストされたレベルはあまり多くないことに注意してください.ネストされたレベルが多すぎると、より簡単な問題解決策がある可能性があります.
(3)辞書に辞書を格納する
users = {
    'aeinstein': {
        'first': 'albert',
        'last': 'einstein',
        'location': 'princeton',
        },
    'mcurie': {
        'first': 'marie',
        'last': 'curie',
        'location': 'paris',
        },
    }
for username, user_info in users.items():
    print("
Username: " + username) full_name = user_info['first'] + ' ' + user_info['last'] location = user_info['location'] print('\tFull name: ' + full_name.title()) print('\tLocation: ' + location.title()) # : Username: aeinstein Full name: Albert Einstein Location: Princeton Username: mcurie Full name: Marie Curie Location: Paris

ここではusersという辞書を定義し、ユーザー名「aeinstein」と「mcurie」の2つのキーを含む.各キーに関連付けられた値は、ユーザーの名前、姓、居住地を含む辞書です.また、辞書の構造はできるだけ同じで、Pythonにはこのような要求はありませんが、ネストされた辞書の処理を容易にすることができます.