「Pythonの基礎 - 辞書の作成と操作」の版間の差分
細 (Wiki がページ「辞書の作成と操作(Python)」を「Pythonの基礎 - 辞書の作成と操作」に、リダイレクトを残さずに移動しました)  | 
				細 (文字列「<source」を「<syntaxhighlight」に置換)  | 
				||
| 11行目: | 11行目: | ||
<br>  | <br>  | ||
辞書 = {キー1:値1, キー2:値2, キー3:値3, ...}という形で宣言する。<br>  | 辞書 = {キー1:値1, キー2:値2, キー3:値3, ...}という形で宣言する。<br>  | ||
  <  |   <syntaxhighlight lang="python">  | ||
  d = {"x":100, "y":200, "z":300}  |   d = {"x":100, "y":200, "z":300}  | ||
  </source>  |   </source>  | ||
| 19行目: | 19行目: | ||
辞書はキーでそれぞれの値を抽出することができる。  | 辞書はキーでそれぞれの値を抽出することができる。  | ||
辞書型変数に続けて角括弧でキーを指定することで、値を抽出できる。<br>  | 辞書型変数に続けて角括弧でキーを指定することで、値を抽出できる。<br>  | ||
  <  |   <syntaxhighlight lang="python">  | ||
  dic = {"x":100, "y":200}  |   dic = {"x":100, "y":200}  | ||
  print(dic["x"])  |   print(dic["x"])  | ||
| 30行目: | 30行目: | ||
<br>  | <br>  | ||
次は、キーを指定して値を変更する。<br>  | 次は、キーを指定して値を変更する。<br>  | ||
  <  |   <syntaxhighlight lang="python">  | ||
  dic = {"x":100, "y":200}  |   dic = {"x":100, "y":200}  | ||
  dic["x"] = 300  |   dic["x"] = 300  | ||
| 41行目: | 41行目: | ||
次に、新たにデータを辞書に追加する。<br>  | 次に、新たにデータを辞書に追加する。<br>  | ||
以下の例では、新しいキーを指定して、新しい要素を追加している。(文字列のキーと数値のキーの両方で行う)<br>  | 以下の例では、新しいキーを指定して、新しい要素を追加している。(文字列のキーと数値のキーの両方で行う)<br>  | ||
  <  |   <syntaxhighlight lang="python">  | ||
  dic = {"x":100, "y":200}  |   dic = {"x":100, "y":200}  | ||
  dic["z"] = 300  |   dic["z"] = 300  | ||
| 57行目: | 57行目: | ||
以下の例では、リストが要素のリスト、タプルが要素のリスト、リストが要素のタプル、文字列のリスト、文字列のタプルをdict関数で変換する。<br>  | 以下の例では、リストが要素のリスト、タプルが要素のリスト、リストが要素のタプル、文字列のリスト、文字列のタプルをdict関数で変換する。<br>  | ||
  <  |   <syntaxhighlight lang="python">  | ||
  list_of_list = [['a', 'b'], ['c', 'd'], ['e', 'f']]  |   list_of_list = [['a', 'b'], ['c', 'd'], ['e', 'f']]  | ||
  list_of_tuple = [('a', 'b'), ('c', 'd'), ('e', 'f')]  |   list_of_tuple = [('a', 'b'), ('c', 'd'), ('e', 'f')]  | ||
| 79行目: | 79行目: | ||
<br>  | <br>  | ||
また、dict関数内で変数に値を代入しても辞書が作成できる。<br>  | また、dict関数内で変数に値を代入しても辞書が作成できる。<br>  | ||
  <  |   <syntaxhighlight lang="python">  | ||
  dic = dict(x=100, y=200)  |   dic = dict(x=100, y=200)  | ||
  print(dic)  |   print(dic)  | ||
| 93行目: | 93行目: | ||
===== keys関数とvalues関数で全てのキーと値を取得する =====  | ===== keys関数とvalues関数で全てのキーと値を取得する =====  | ||
これらの関数は、それぞれキーの全て、値の全てを取得する時に使用する。<br>  | これらの関数は、それぞれキーの全て、値の全てを取得する時に使用する。<br>  | ||
  <  |   <syntaxhighlight lang="python">  | ||
  dic = {'x':100, 'y':200}  |   dic = {'x':100, 'y':200}  | ||
  print(dic.keys())  |   print(dic.keys())  | ||
| 105行目: | 105行目: | ||
===== update関数で辞書を結合する =====  | ===== update関数で辞書を結合する =====  | ||
update関数は、2つの異なる辞書を結合することができる。キーが同じ場合は新しい値に更新する。<br>  | update関数は、2つの異なる辞書を結合することができる。キーが同じ場合は新しい値に更新する。<br>  | ||
  <  |   <syntaxhighlight lang="python">  | ||
  dic1 = {'l':10, 'm':200, 'n':300}  |   dic1 = {'l':10, 'm':200, 'n':300}  | ||
  dic2 = {'l':100, 'o':400}  |   dic2 = {'l':100, 'o':400}  | ||
| 118行目: | 118行目: | ||
辞書は角括弧[]にキーを指定することで値を取得することができるが、get関数を使用しても同様のことができる。<br>  | 辞書は角括弧[]にキーを指定することで値を取得することができるが、get関数を使用しても同様のことができる。<br>  | ||
また、辞書にないキーを指定した場合、get関数では何も返さず、角括弧[]で指定した場合はエラーになる。<br>  | また、辞書にないキーを指定した場合、get関数では何も返さず、角括弧[]で指定した場合はエラーになる。<br>  | ||
  <  |   <syntaxhighlight lang="python">  | ||
  dic = {'x':10, 'y':20}  |   dic = {'x':10, 'y':20}  | ||
  val = dic.get('x')  # d['x']と同じ操作  |   val = dic.get('x')  # d['x']と同じ操作  | ||
| 130行目: | 130行目: | ||
get関数と似たようなメソッドでpop関数がある。<br>  | get関数と似たようなメソッドでpop関数がある。<br>  | ||
pop関数もキーを指定して値を取得するが、辞書からキーで指定した値を削除するという特徴がある。  | pop関数もキーを指定して値を取得するが、辞書からキーで指定した値を削除するという特徴がある。  | ||
  <  |   <syntaxhighlight lang="python">  | ||
  dic = {'x':100, 'y':200, 'z':300}  |   dic = {'x':100, 'y':200, 'z':300}  | ||
  value = dic.pop('x')  |   value = dic.pop('x')  | ||
| 143行目: | 143行目: | ||
===== delで要素を削除する =====  | ===== delで要素を削除する =====  | ||
pop関数ではキーの値を取得した後は辞書から削除されるが、delを使用すると同様に削除することができる。<br>  | pop関数ではキーの値を取得した後は辞書から削除されるが、delを使用すると同様に削除することができる。<br>  | ||
  <  |   <syntaxhighlight lang="python">  | ||
  dic = {'x':100, 'y':200, 'z':300}  |   dic = {'x':100, 'y':200, 'z':300}  | ||
  del dic['y']  |   del dic['y']  | ||
| 153行目: | 153行目: | ||
<br>  | <br>  | ||
また、キーを指定せずにdel関数を使用する場合は、辞書自体が削除される。<br>  | また、キーを指定せずにdel関数を使用する場合は、辞書自体が削除される。<br>  | ||
  <  |   <syntaxhighlight lang="python">  | ||
  del dic  |   del dic  | ||
  </source>  |   </source>  | ||
| 159行目: | 159行目: | ||
===== clear関数で値を削除する =====  | ===== clear関数で値を削除する =====  | ||
delを使用すると辞書自体が削除されるが、clear関数を使用すると値のみを削除して空の辞書が残り、辞書自体の操作を続けることができる。<br>  | delを使用すると辞書自体が削除されるが、clear関数を使用すると値のみを削除して空の辞書が残り、辞書自体の操作を続けることができる。<br>  | ||
  <  |   <syntaxhighlight lang="python">  | ||
  dic = {'x':100, 'y':200, 'z':300}  |   dic = {'x':100, 'y':200, 'z':300}  | ||
  dic.clear()  |   dic.clear()  | ||
| 172行目: | 172行目: | ||
"キー" in 辞書の形で使用する。<br>  | "キー" in 辞書の形で使用する。<br>  | ||
辞書にキーが存在すればTrue、キーが存在しない場合はFalseを返す。<br>  | 辞書にキーが存在すればTrue、キーが存在しない場合はFalseを返す。<br>  | ||
  <  |   <syntaxhighlight lang="python">  | ||
  dic = {'x':100, 'y':200, 'z':300}  |   dic = {'x':100, 'y':200, 'z':300}  | ||
  print('x' in dic)  |   print('x' in dic)  | ||
| 188行目: | 188行目: | ||
<br>  | <br>  | ||
===== 代入演算子でコピーする(参照渡し) =====  | ===== 代入演算子でコピーする(参照渡し) =====  | ||
  <  |   <syntaxhighlight lang="python">  | ||
  dic1 = {'x':100, 'y':200, 'z':300}  |   dic1 = {'x':100, 'y':200, 'z':300}  | ||
  dic2 = d1  |   dic2 = d1  | ||
| 203行目: | 203行目: | ||
===== copy関数でコピーする(値渡し) =====  | ===== copy関数でコピーする(値渡し) =====  | ||
全く独立した別の辞書として扱えるようするには、copy関数を使用する。<br>  | 全く独立した別の辞書として扱えるようするには、copy関数を使用する。<br>  | ||
  <  |   <syntaxhighlight lang="python">  | ||
  dic1 = {'x':100, 'y':200, 'z':300}  |   dic1 = {'x':100, 'y':200, 'z':300}  | ||
  dic2 = d1.copy()  |   dic2 = d1.copy()  | ||
2021年11月22日 (月) 11:51時点における版
概要
辞書(ディクショナリ)とは、複数のデータ型を管理することができる。(連想配列とも呼ばれる)
辞書の特徴は、要素を格納する時に、キーを使用して管理することができる。
Pythonの辞書型は、要素の順番をこれまでは保持することができなかったが、Python3.7から辞書データの順番が保持される仕様になった。
辞書の定義
辞書は、複数の要素を波括弧{}で括って宣言する。
辞書の要素は、キーと値を対応させてコロンで結び、カンマで区切って格納する。
辞書 = {キー1:値1, キー2:値2, キー3:値3, ...}という形で宣言する。
<syntaxhighlight lang="python">
d = {"x":100, "y":200, "z":300}
</source>
辞書の操作
辞書はキーでそれぞれの値を抽出することができる。
辞書型変数に続けて角括弧でキーを指定することで、値を抽出できる。
<syntaxhighlight lang="python">
dic = {"x":100, "y":200}
print(dic["x"])
print(dic["y"])
# 出力
100
200
</source>
次は、キーを指定して値を変更する。
<syntaxhighlight lang="python">
dic = {"x":100, "y":200}
dic["x"] = 300
print(dic)
# 出力
{'x' : 300, 'y' : 200}
</source>
次に、新たにデータを辞書に追加する。
以下の例では、新しいキーを指定して、新しい要素を追加している。(文字列のキーと数値のキーの両方で行う)
<syntaxhighlight lang="python">
dic = {"x":100, "y":200}
dic["z"] = 300
dic[10] = 400
print(dic)
# 出力
{'x' : 100, 'y' : 200, 'z' : 300, 10 : 400}
</source>
dict関数で辞書に変換する
辞書は、文字列・タプル・リストをdict関数を使用して変換して作成することができる。
それぞれキーと要素との2つの組み合わせになったものであることが必要である。
以下の例では、リストが要素のリスト、タプルが要素のリスト、リストが要素のタプル、文字列のリスト、文字列のタプルをdict関数で変換する。
<syntaxhighlight lang="python">
list_of_list = [['a', 'b'], ['c', 'd'], ['e', 'f']]
list_of_tuple = [('a', 'b'), ('c', 'd'), ('e', 'f')]
tuple_of_list = (['a', 'b'], ['c', 'd'], ['e', 'f'])
list_of_string = ['ab', 'cd', 'ef']
tuple_of_string = ('ab', 'cd', 'ef')
print(dict(list_of_list))
print(dict(list_of_tuple))
print(dict(tuple_of_list))
print(dict(list_of_string))
print(dict(tuple_of_string))
# 出力
{'a' : 'b', 'c' : 'd', 'e' : 'f'}
{'a' : 'b', 'c' : 'd', 'e' : 'f'}
{'a' : 'b', 'c' : 'd', 'e' : 'f'}
{'a' : 'b', 'c' : 'd', 'e' : 'f'}
{'a' : 'b', 'c' : 'd', 'e' : 'f'}
</source>
また、dict関数内で変数に値を代入しても辞書が作成できる。
<syntaxhighlight lang="python">
dic = dict(x=100, y=200)
print(dic)
# 出力
{x : 100, y : 200}
</source>
辞書のメソッド
辞書型には、様々なメソッドがある。ここでは、よく使用されるものを記載する。
keys関数とvalues関数で全てのキーと値を取得する
これらの関数は、それぞれキーの全て、値の全てを取得する時に使用する。
<syntaxhighlight lang="python">
dic = {'x':100, 'y':200}
print(dic.keys())
print(dic.values())
# 出力
dict_keys(['x', 'y'])
dict_values([100, 200])
</source>
update関数で辞書を結合する
update関数は、2つの異なる辞書を結合することができる。キーが同じ場合は新しい値に更新する。
<syntaxhighlight lang="python">
dic1 = {'l':10, 'm':200, 'n':300}
dic2 = {'l':100, 'o':400}
dic1.update(dic2)
print(dic1)
# 出力
{'l' : 100, 'm' : 200, 'n' : 300, 'o' : 400}
</source>
get関数で値を取得する
辞書は角括弧[]にキーを指定することで値を取得することができるが、get関数を使用しても同様のことができる。
また、辞書にないキーを指定した場合、get関数では何も返さず、角括弧[]で指定した場合はエラーになる。
<syntaxhighlight lang="python">
dic = {'x':10, 'y':20}
val = dic.get('x')  # d['x']と同じ操作
print(val)
# 出力
10
</source>
pop関数で値を取得する
get関数と似たようなメソッドでpop関数がある。
pop関数もキーを指定して値を取得するが、辞書からキーで指定した値を削除するという特徴がある。
<syntaxhighlight lang="python">
dic = {'x':100, 'y':200, 'z':300}
value = dic.pop('x')
print(value)
print(dic)
# 出力
100
{'y' : 200, 'z' : 300}
</source>
delで要素を削除する
pop関数ではキーの値を取得した後は辞書から削除されるが、delを使用すると同様に削除することができる。
<syntaxhighlight lang="python">
dic = {'x':100, 'y':200, 'z':300}
del dic['y']
print(dic)
# 出力
{'x' : 100, 'z' : 300}
</source>
また、キーを指定せずにdel関数を使用する場合は、辞書自体が削除される。
<syntaxhighlight lang="python"> del dic </source>
clear関数で値を削除する
delを使用すると辞書自体が削除されるが、clear関数を使用すると値のみを削除して空の辞書が残り、辞書自体の操作を続けることができる。
<syntaxhighlight lang="python">
dic = {'x':100, 'y':200, 'z':300}
dic.clear()
print(dic)
# 出力
{}
</source>
inでキーの有無を調べる
辞書に指定するキーがあるかを調べるには、inを使用する。
"キー" in 辞書の形で使用する。
辞書にキーが存在すればTrue、キーが存在しない場合はFalseを返す。
<syntaxhighlight lang="python">
dic = {'x':100, 'y':200, 'z':300}
print('x' in dic)
print('a' in dic)
# 出力
True
False
</source>
辞書のコピー
辞書をコピーするには、代入演算子で代入する方法とcopy関数を使用する方法がある。
ただし、これはリストのコピーの時と同様に、値渡しと参照渡しの違いがあるので注意が必要である。
代入演算子でコピーする(参照渡し)
<syntaxhighlight lang="python">
dic1 = {'x':100, 'y':200, 'z':300}
dic2 = d1
dic2['x'] = 500
print(dic1)
print(dic2)
# 出力
{'x' : 500, 'y' : 200, 'z' : 300}
{'x' : 500, 'y' : 200, 'z' : 300}
</source>
copy関数でコピーする(値渡し)
全く独立した別の辞書として扱えるようするには、copy関数を使用する。
<syntaxhighlight lang="python">
dic1 = {'x':100, 'y':200, 'z':300}
dic2 = d1.copy()
dic2['x'] = 500
# 出力
{'x' : 100, 'y' : 200, 'z' : 300}
{'x' : 500, 'y' : 200, 'z' : 300}
</source>