いろいろ倉庫

KNIME、EXCEL、R、Pythonなどの備忘録

【Python】リストを辞書に変換したい

・お題:リストを辞書に変換したい。

 

・いくつかのデータを纏めて管理するデータ型として、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()関数に渡す必要はなくて、そのまま渡せば辞書にしてくれる。

 

・ほかにもやり方はいろいろありそう。

 

おわり