1. 辞書の紹介
辞書は、中括弧 { } で囲まれた一連のキーと値のペアで表されます。
1.1 辞書を作成する
空の中括弧のペアを使用して辞書を定義し、各キーと値のペアを個別に追加します。
alien = {
}
alien['color'] = 'green'
alien['points'] = 5
print(alien)
1.2 辞書内の値へのアクセス
ディクショナリ内の要素はキーと値のペアで構成されます。キーに関連付けられた値を取得するには、ディクショナリ名に続いて角括弧で囲んだキーを指定します。
alien_0 = {
'color':'green','points':5}
print(alien_0['color'])
print(alien_0['points'])
ディクショナリには、任意の数のキーと値のペアを含めることができます。
1.3 キーと値のペアを追加する
辞書は、キーと値のペアをいつでも追加できる動的な構造です。キーと値のペアを追加するには、ディクショナリ名を指定し、その後に角かっこで囲まれたキーと、関連付けられた値を指定します。
alien_0 = {
'color':'green','points':5}
print(alien_0)
alien_0['x_position'] = 0
alien_0['y_position'] = 25
print(alien_0)
1.4 辞書の値を変更する
ディクショナリ内の値を変更するには、ディクショナリ名、角括弧で囲まれたキー、およびそのキーに関連付けられた新しい値を指定します。
alien_0 = {
'color':'green','points':5}
print(alien_0['color'])
alien_0['color'] = 'yellow'
print(alien_0['color'])
例
異なる速度で移動できるエイリアンの位置を追跡し、エイリアンの移動速度を「速い、遅い、中」の3つの速度に設定し、速い速度で右に3mずつ移動し、右に1m移動します低速で一度に右、中速 速度は一度に 2m ずつ右に移動します。エイリアンの位置は (0,25) です。異なる速度で移動した後のロボットの位置は何ですか?
alien = {
'name':'alen','color':'red','x_position':0,'y_position':25,'speed':'medium'}
position = (alien['x_position'],alien['y_position'])
print(f"The position is {
position}")
if alien['speed'] == 'fast':
x = 3
elif alien['speed'] == 'medium':
x = 2
elif alien['speed'] == 'slow':
x = 1
alien['x_position'] += x
new_position = (alien['x_position'],alien['y_position'])
print(f"The new position with the speed of {
alien['speed']} is {
new_position}")
コードには中速時の位置座標を設定します。
辞書内の速度キーに対応する値を変更して、さまざまな速度の位置を取得します。
1.5 キーと値のペアの削除
del ステートメントを使用して、不要なキーと値のペアを削除します
alien = {
'name':'alen','color':'red','x_position':0,'y_position':25,'speed':'fast'}
print(alien)
del alien['name']
print(alien)
1.6 複数の類似オブジェクトの辞書
前の例では、辞書にはオブジェクト (エイリアン) の複数の属性が保存されていますが、辞書を使用してみんなのお気に入りのプログラミング言語を保存するなど、辞書を使用して多くのオブジェクトの同じ情報を保存することもできます。
favorite_lauguague = {
'ken':'python',
'jack':'c++',
'will':'java',
'mary':'ruby'
}
print(f"Will's favorite lauguague is {
favorite_lauguague['will'].title()}")
上に示した複数行の定義は、長い辞書を定義するときに使用できます。
1.7 get() を使用した値へのアクセス
- get(key, 指定されたキーが存在しない場合に返される値)
この関数は、目的のキーが存在しない場合の例外を処理します。
favorite_languague = {
'ken':'python',
'jack':'c++',
'will':'java',
'mary':'ruby'
}
print(favorite_languague)
languague = favorite_languague.get('diane','ERROR!No Such People Named Diane!')
print(languague)
favorite_languague['diane'] = 'c'
languague = favorite_languague.get('diane','ERROR!No Such People Named Diane!')
print(favorite_languague)
print(languague)
上記のコードでは次のようになります。
- get を使用して存在しないキー (diane が存在しない) をクエリすると、例外が発生すると get メソッドで定義された文字列が返されます。
- get を使用して既存のキーをクエリすると (対応する値 c を Diane キーに割り当てます)、キーに対応する値が返されます。
1.8 演習
print('6-1')
people = {
'first_name':'winnie',
'last_name':'ma',
'age':22,
'city':'zibo'
}
print(people)
print('6-2')
favorate_numbers={
'will':5,
'jack':10,
'diane':6,
'peter':51,
'mary':8
}
次に、辞書を調べます
2.1 すべてのキーと値のペアをスキャンする
for ループとitems メソッドを使用して、すべてのキーと値のペアを反復処理します。
Dictionary.items( ) のキー、値の場合
- for ループ内でキーと値を表す 2 つの変数 key と value を宣言します。任意の変数名 (k、v など) を使用できます。
- items メソッドはキーと値のペアのリストを返し、返された値は 2 つの変数に割り当てられます。
user_0 = {
'username' : 'jack',
'age' : 20,
'city' : 'los angeles'
}
for key,value in user_0.items():
print(key,value)
例
みんなのお気に入りの言語は何ですかを出力します。ここで使用されている 2 つの変数名は、変数、つまり名前と言語に対応しています。
favorite_languages = {
'jen': 'python',
'sarah': 'c',
'edward': 'ruby',
'phil': 'python',
}
for name,lauguage in favorite_languages.items():
print(f"{
name.title()}'s favorate language is {
lauguage.title()}.")
2.2 辞書内のすべてのキーを走査する
key( ) : 辞書内のすべてのキーを含むリストを返します。
favorite_languages = {
'jen': 'python',
'sarah': 'c',
'edward': 'ruby',
'phil': 'python',
}
for name in favorite_languages.keys():
print(name.title())
key() メソッドは、トラバースするために使用できるだけでなく、キーが辞書に含まれているかどうかを判断するためにも使用できます。
favorite_languages = {
'jen': 'python',
'sarah': 'c',
'edward': 'ruby',
'phil': 'python',
}
if 'will' not in favorite_languages.keys():
print('Will, please enter your name!')
2.3 辞書内のすべてのキーを特定の順序でたどります
キーをsortedメソッドを使用して並べ替えます:sorted(dictionary.keys())
favorite_languages = {
'jen': 'python',
'sarah': 'c',
'edward': 'ruby',
'phil': 'python',
}
for name in sorted(favorite_languages.keys()):
print(f"{
name.title()}, thank you!")
出力名がアルファベット順にソートされていることがわかります。
2.4 辞書内のすべての値を走査する
value( ) メソッドは値のリストを返します。
favorite_languages = {
'jen': 'python',
'sarah': 'c',
'edward': 'ruby',
'phil': 'python',
'will' : 'python'
}
for lauguage in sorted(favorite_languages.values()):
print(lauguage)
このメソッドで出力される値には Python で重複した項目があることが分かりますが、重複した項目を削除したい場合は set メソッドを使用して重複した項目を削除できます。
出力値の重複を排除する方法
set( ): セット。セット内の各要素は一意です。
favorite_languages = {
'jen': 'python',
'sarah': 'c',
'edward': 'ruby',
'phil': 'python',
'will' : 'python'
}
for lauguage in set(favorite_languages.values()):
print(lauguage)
Python の重複が削除されていることがわかります。
集める
セットは、辞書と同様に中括弧を使用して定義されます。中括弧内にキーと値のペアがない場合、その定義はコレクションである可能性があります。
lauguages = {
'python','python','c'}
print(lauguages)
定義されたコレクション内に重複した要素があることがわかり、コレクションの出力は自動的に重複排除されます。
2.5 演習
コード
print('6-5')
rivers_countrys = {
'nile':'egypt',
'changjiang':'china',
'amazon':'brazil'
}
for river,country in rivers_countrys.items():
print(f"The {
river.title()} runs through {
country.title()}.")
print('6-6')
favorite_languages = {
'jen': 'python',
'sarah': 'c',
'edward': 'ruby',
'phil': 'java',
'will' : 'python'
}
names = ['will','jen','peter','ken']
for name in names:
if name in favorite_languages.keys():
print(f"Dear {
name.title()}, thank you!")
else:
print(f'Dear {
name.title()}, please joy our party.')
出力
3. 辞書とリストのネストされた使用
3.1 辞書をリストに保存する
参加するには複数人のリストが必要で、各人の名前、年齢、性別の情報を含める必要がありますが、これらの複数人の情報をどのように調整して管理するのでしょうか?
答えは、ユーザーのリストを作成することです。各ユーザーは、ユーザーに関するさまざまな情報を含む辞書になります。
リストに辞書を手動で入力する
user_1 = {
'name':'will','age':40,'gender':'male'}
user_2 = {
'name':'diane','age':37,'gender':'female'}
user_3 = {
'name':'cary','age':25,'gender':'male'}
users = [user_1,user_2,user_3]
for user in users:
print(user)
複数の人の辞書を自動的に生成し、リストに追加します。
さらに多くのユーザー情報を生成する必要がある場合は、まずユーザーの空のリストを作成し、次に range メソッドを使用して必要な数のユーザーを生成します。
users = []
for number in range(30):
new_user = {
'name':'will','age':40,'gender':'male'}
users.append(new_user)
#显示前5个
for user in users[:5]:
print(user)
range(30) を使用して 30 個のユーザー辞書を自動的に生成し、append メソッドを使用してそれらをユーザー リストに順番に追加します。
次の図は、出力前のユーザー リストの最初の 5 つのユーザー辞書を示しています。
3.2 辞書へのリストの保存
人々が習得するプログラミング言語の辞書を構築したい場合、各人が複数のプログラミング言語を習得する可能性があるため、複数の値に対応するキーが必要になり、辞書内でリストをネストできます。
people_lauguages = {
'will' : ['python','c'],
'peter' : ['c++','java'],
'ken' : ['ruby','c++','go']
}
for people,lauguages in people_lauguages.items():
print(f"{
people.title()} can master:",end=" ")
for lauguage in lauguages:
print(lauguage.title(),end=" ")
else:
print("\n")
辞書内の各リストの長さを出力します。
value メソッドを使用して辞書内のリストを取得し、len メソッドを使用してリストの長さをカウントします。
people_lauguages = {
'will' : ['python','c'],
'peter' : ['c++','java'],
'diane' : ['python'],
'ken' : ['ruby','c++','go'],
'cary' : ['c']
}
for lauguages in people_lauguages.values():
print(len(lauguages))
練習する
人々が習得した言語の数をさらに判断する必要がある場合、1 つの言語しか習得できない場合は、「学習を続ける必要があります」という文を出力します。
people_lauguages = {
'will' : ['python','c'],
'peter' : ['c++','java'],
'diane' : ['python'],
'ken' : ['ruby','c++','go'],
'cary' : ['c']
}
for people,lauguages in people_lauguages.items():
if len(lauguages) == 1:
print(f"{
people.title()}, you need to learn more lauguages!",end=" ")
elif len(lauguages) >=2:
print(f"{
people.title()}, you already master",end=" ")
for lauguage in lauguages:
print(lauguage,end=" ")
else:
print("error!")
print("\n")
3.3 辞書内に辞書を格納する
同じ構造の辞書が辞書内にネストされます。
users = {
'mary' : {
'age':21,
'gender':'female'
},
'will' : {
'age':40,
'gender':'male'
}
}
for name, name_info in users.items():
print(f"{
name}")
for age,gender in name_info.items():
print(age,gender)
4. 演習
6-7
#6-7
people_1 = {
'first_name':'winnie',
'last_name':'ma',
'age':22,
'city':'zibo'
}
people_2 = {
'first_name':'will',
'last_name':'zhao',
'age':40,
'city':'qingdao'
}
people_3 = {
'first_name':'mary',
'last_name':'wang',
'age':20,
'city':'jinan'
}
people = [people_3,people_2,people_1]
for p in people:
for k,v in p.items():
print(k,v)
6-8
6-9
#6-9
favorate_place = {
'peter' : ['america'],
'cary' : ['china','brazil','italy'],
'diane' : ['india','france']
}
for name,places in favorate_place.items():
if len(places) == 1:
print(f"{
name.title()}'s avorate place is {
places[0].title()}!")
elif len(places)>=2:
print(f"{
name.title()}'s favorate places are",end=" ")
i=1
for place in places:
if i<=len(places)-1:
print(f"{
place.title()}",end=" and ")
i+=1
else:
print(f"{
place.title()}",end="!\n")
else:
print("error")
6-11
#6-11
cities = {
'zibo':{
'country':'china',
'num_people':9000,
'food':'barbecue'
},
'jinan':{
'country':'china',
'num_people':500,
'food':'meet'
},
'qingdao':{
'country':'china',
'num_people':6300,
'food':'sea food'
}
}
for city,city_info in cities.items():
print(f"{
city.title()}")
for k,v in city_info.items():
print(k,v)