パソコン日記

気づいたことをまとめる

Pythonでファイルの1列目を辞書(ディクショナリ)キーとして、2列目以降を値として指定する

Pythonで辞書(ディクショナリ)をうまく使いたい

pythonで辞書(ディクショナリ)はキーで値を得ることができ 、非常に便利な機能の一つです。プログラムのインプットファイル的なものを作るときに、1列目を辞書のキーとして、二列目以降をその値として読み込みたいと思ったのでプログラムを書いてみました。すぐ忘れてしまうのでメモ的な記事です。

ファイルの読み込み

次のようにファイルを読み込んでみました。

with open(inputfile, 'r') as f:
    lines = [x.strip() for x in f.readlines() if x.strip() != ""]

空白行は読み込みたくないので、最後の

if x.strip() != ""

で読み込まないようにしました。

空白で区切られたファイルの1列目をキー、2列目以降を値としてディクショナリを作成する

次のように、辞書内包表記で書いてみました。

dic = {x.split(' ', 1)[0]:x.strip().split(' ',1)[1] if len(x.split()) >= 2 else '' for x in lines}

ちょっと複雑?になってるのかもしれません。 最初の

x.split(' ',1)

は文字列xを一つ目の空白' 'で区切り、あとは区切らないという意味です。カンマで区切りたければ","で、2番目まで区切りたかったら1を2にすればいいみたいです。区切られた文字列の1番目(添字は0)をキーとし、2番目(添字は1)を値とします。 また、1列目だけ指定したいときもあると思うので

 if len(x.split()) >= 2 else ''

とし、空白などで区切られてなかったらキーのみ指定し、値に''をいれておきました。 これで意図したディクショナリを作ることができると思います。