PlayGround Article Python pythonの基礎(辞書に関して) takuto 2018年9月3日 Created with Sketch. 1 Created with Sketch. 292 miharun エンジニア初心者 文字列charの値が以下のプログラムで与えられた時 import string char = string.ascii_lowercase 以下の問いに答えてください。 # 1.dict関数、zip関数、range関数について説明し、以下のプログラムを解説してください。 ``` abc_dict = dict(zip(range(97,100), 'abc')) print(abc_dict) ``` ### dict関数 新しい辞書を作成する関数 ### zip関数 複数のリストやタプルを合体し、それを返す関数 ### range関数 連続した数字のオブジェクトを作るための関数 指定されたコードを出力すると、 ``` {97: 'a', 98: 'b', 99: 'c'} ``` となる。 rangeの範囲や文字列をいじってみると、 ``` abc_dict = dict(zip(range(95, 100), "abc")) print(abc_dict) ``` ``` {95: 'a', 96: 'b', 97: 'c'} ``` ``` abc_dict = dict(zip(range(97, 100), "char")) print(abc_dict) ``` ``` {97: 'c', 98: 'h', 99: 'a'} ``` となることから、このプログラムは左から順に数字と文字列が対応したものだけが出力される。 # 2.list関数、map関数、lambda式について説明し、以下のプログラムを解説してください。 ``` dec = list(map(ord, 'abc')) print(dec) ``` ### list関数 複数の要素を含むコンテナ型オブジェクト ### map関数 リストのようなオブジェクトに含まれる各要素に対して、何かしらの変換を行った別のオブジェクトを作る関数 ### lamda式 関数を式として扱い変数に代入できるようにする手法。つまり、関数をわざわざ定義する必要がなく、コードがより簡潔になる。 指定されたコードを出力すると、 ``` [97, 98, 99] ``` となる。ord関数は文字を文字コードに変換する関数なので、このプログラムは'abc'のそれぞれに対応した文字コードが出力される。 # 3.文字列charを用いて、以下のようなkeyに10進数、valueにアルファベットを含む辞書ascii_dictを作成してください。ただし、プログラムは出力用のprint関数を含めて二行までとします。 ``` ascii_dict = { 97: 'a', 98: 'b', 99: 'c', 100: 'd', 101: 'e', 102: 'f', 103: 'g', 104: 'h', 105: 'i', 106: 'j', 107: 'k', 108: 'l', 109: 'm', 110: 'n', 111: 'o', 112: 'p', 113: 'q', 114: 'r', 115: 's', 116: 't', 117: 'u', 118: 'v', 119: 'w', 120: 'x', 121: 'y', 122: 'z' } ``` ``` ascii_dict = {ord(x): x for x in char} print("ascii_dict=", ascii_dict) ``` となる。方針としては、辞書内包表記を用いて文字列に対応する数字を導くord関数と組み合わせた。 # 4.3のプログラムで得た辞書ascii_dictおよび辞書内包表記を用いて、以下のような辞書ascii_dictのvalueとkeyの値を入れ替えた辞書reverse_lookupを作成してください。ただし、プログラムは出力用のprint関数を含めて二行までとします。 ``` reverse_lookup = { 'a': 97, 'b': 98, 'c': 99, 'd': 100, 'e': 101, 'f': 102, 'g': 103, 'h': 104, 'i': 105, 'j': 106, 'k': 107, 'l': 108, 'm': 109, 'n': 110, 'o': 111, 'p': 112, 'q': 113, 'r': 114, 's': 115, 't': 116, 'u': 117, 'v': 118, 'w': 119, 'x': 120, 'y': 121, 'z': 122 } ``` ``` reverse_lookup = {x: y for x, y in zip(char, ascii_dict)} print("reverse_lookup=", reverse_lookup) ``` 方針としては、3のように辞書内包表記を用いてzip関数を組み合わせた。 # 5.3のプログラムで得た辞書ascii_dictおよびsorted関数を用いて、以下のような辞書ascii_dictのkeyを降順に並び替えた辞書upside_downを作成してください。ただし、プログラムは出力用のprint関数を含めて二行までとします。 ``` upside_down = { 122: 'z', 121: 'y', 120: 'x', 119: 'w', 118: 'v', 117: 'u', 116: 't', 115: 's', 114: 'r', 113: 'q', 112: 'p', 111: 'o', 110: 'n', 109: 'm', 108: 'l', 107: 'k', 106: 'j', 105: 'i', 104: 'h', 103: 'g', 102: 'f', 101: 'e', 100: 'd', 99: 'c', 98: 'b', 97: 'a' } ``` ``` upside_down = dict(zip(sorted(ascii_dict, reverse=True), sorted(char, reverse=True))) print("upside_down=", upside_down) ``` 方針としては、1のプログラムのような形を作り、sorted関数を用いた。