・お題:リストを辞書に変換したい。
・いくつかのデータを纏めて管理するデータ型として、Pythonにはリストをはじめとするいくつかの型が用意されている。
・リスト([a,b,c,d]みたいなやつ)からデータを引っ張ってくるには、リストの何番目のデータをとってくるのか指定してやれば良い。
・「何番目かは知らないけれど、キーを知っているので、値を返して欲しいよ」という場合には、辞書を使う。辞書では、{"キー1":"値1","キー2":"値2",…...}のような形でデータを管理し、"キー1"に対応する値を返してね、とお願いすると"値1"を返してくれる。
・例①今、手元に偶然、以下のリストを入手したとする。
Lis=["A=a1","B=b1","C=c1","D=d1"]
これを"A"をキーとして"a1"を返してくれるような辞書にしたい。
・やり方は以下を実行する。
Dic=dict([x.split("=") for x in Lis])
これで、Dicの中身は、
{'A': 'a1', 'B': 'b1', 'C': 'c1', 'D': 'd1'}
という辞書になる。
・流れは以下の通り。
[x.split("=") for x in Lis]を実行すると、
[['A', 'a1'], ['B', 'b1'], ['C', 'c1'], ['D', 'd1']]が返ってくる。"="でLisの要素をカチ割ってリスト化するという処理をLisの要素に一つずつ実行した感じになる。
dict()関数は、要素が2つのイテラブルなものを渡すと"キー","値"の組と判別して辞書に変換してくれる。
・例②今、手元に偶然、キーと値のリストを入手したとする。
KeyLis=["A","B","C","D"]
ValLis=["a1","b1","c1","d1"]
これを"A"をキーとして"a1"を返してくれるような辞書にしたい。
・やり方は以下を実行する。
Dic2=dict(zip(KeyLis,ValLis))
これで、Dic2の中身は、
{'A': 'a1', 'B': 'b1', 'C': 'c1', 'D': 'd1'}
という辞書になる。
・zipが要素を並行して取得する感じになるので、例えばlist(zip(KeyLis,ValLis))と入力すれば[('A', 'a1'), ('B', 'b1'), ('C', 'c1'), ('D', 'd1')]が返ってくる。わざわざリスト化してdict()関数に渡す必要はなくて、そのまま渡せば辞書にしてくれる。
・ほかにもやり方はいろいろありそう。
おわり