組み込み関数 dict()
dict型のインスタンス(辞書)を生成するには、組み込み関数dictを利用すると便利です。
>>> dict()
{}
関数dictの引数を省略すると、空の辞書 {} を生成します。
キーワード引数を使うと
>>> dict(a=1,b=2,c=3)
{'a': 1, 'c': 3, 'b': 2}
キーワード引数を指定すると、各引数に対応する要素対(キーと値)を列挙した辞書を生成します。すると、キーワード引数c=3をもとにして、文字列キー'c'に整数値 3 が対応する、新たな要素対'c':3が辞書に登録されます。
辞書に登録した順序には意味がないので、その出力結果も順不同です。そもそも、実引数を指定する順序を気にしなくても良いのが、キーワード引数を使う理由の一つです。そこで、辞書を作成するときに「キーワード引数を使いたい」と考えるのは当然です。ただし、指定したキーワードは文字列として登録されるので、汎用性がなく、任意(文字列以外)のキーを扱いたいときには、別のアプローチが必要になります。
タプルを使うと
>>> dict([("a",1),("b",2),("c",3)])
{'a': 1, 'c': 3, 'b': 2}
2つの要素を持つタプルを列挙したリストを引数に指定すると、各タプルに対応する要素対(キーと値)を列挙した辞書を生成します。すると、タプル("c",3)をもとにして、新たな要素対'c':3が辞書に登録されます。
内包を使うと
>>> [e for e in enumerate("def")]
[(0, 'd'), (1, 'e'), (2, 'f')]
enumerate型のインスタンス(列挙)を生成するには、組み込み関数enumerateを利用すると便利です。シーケンス型の引数に含まれる各要素に対して、その添字と各要素を持つタプルを列挙したリストを生成します。各添字には、先頭からのオフセット値(0 から始まる整数値)が順に割り当てられます。
リスト内のforに続く制御変数eには、まず、0番目の(長さ1の)文字列'd'に対して、タプル(0,'d')が割り当てられます。さらに、各文字ごとに同様のタプルが生成されるので、変数eを介して、これらを順にアクセスできます。
>>> dict([(v,k) for k,v in enumerate("def")])
{'e': 1, 'd': 0, 'f': 2}
forに続く制御変数k,vには、オフセット値と要素が順に割り当てられます。そこで、これらの順序を入れ替えると、文字列キーと整数値を要素対とする辞書を生成できます。すると、タプル(0,'d')をもとにして、新たな要素対 'd':0 が辞書に登録されます。
>>> dict([(e,ord(e)) for e in "ABC"])
{'A': 65, 'C': 67, 'B': 66}
ここでは、文字列キーeと ASCII値ord(e)を要素対とする辞書を生成します。すると、タプル'C',ord('C')をもとにして、新たな要素対'C':67が辞書に登録されます。
乱数:モジュール random
モジュールrandomは、乱数を扱うのに便利なサービスを提供します。
>>> from random import * >>> random <built-in method random of Random object at 0x1889010> >>> random() 0.79616733159224029 >>> random() 0.16592115650929051
関数randomを利用すると、任意の乱数が得られます。ここでは、random()を呼び出すたびに、異なる乱数が得られるのが分かります。
>>> [int(random()*100) for e in range(5)] [80, 49, 5, 93, 23]
組み込み関数intを利用すると、指定した引数に相当する整数が得られます。ここでは、生成した乱数をもとに、2桁の整数(0~99)が得られるのが分かります。
>>> [randint(0,99) for e in range(5)] [99, 23, 69, 81, 17]
関数randintを利用すると、引数(下限,上限)に指定した範囲内の整数が得られます。この方法でも、2桁の乱数(0~99)が得られるのが分かります。
