いろいろ倉庫

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

【Python】辞書を参考にしてリストの値を置換したい。

・お題:辞書を参考にしてリストの値を置換したい。もし辞書にないキーがリストに現れたら、据え置きしたい。

 

・例えば、何が売れたかのリストがあるとする。

Lis=["りんご","ぶどう","みかん","みかん","ばなな"]

・これに対して、品目を値段に置換し、値段のリストを作成したい。

・パターン1:すべての値段が分かっている場合

①とりあえず、品目と値段を対応させた辞書を作成する。

Jisho={"ばなな":50,"みかん":100,"りんご":200,"ぶどう":300}

②Jishoから何等かの品目を引っ張ってくると、値段が返ってくる。

Jisho["りんご"]

を実行すると、200が返ってくる。

③リスト内包表記で記載してみる。

Lis=["りんご","ぶどう","みかん","みかん","ばなな"]

[Jisho[i] for i in Lis]

を実行すると、[200, 300, 100, 100, 50]が返ってくる。

これをsumすれば、いくら払えば良いかわかる。

 

・パターン2:ばななの値段が分からないとき。

①とりあえず、品目と値段を対応させた辞書を作成する。

Jisho={"みかん":100,"りんご":200,"ぶどう":300}

②パターンAのリスト内包表記を実行すると、エラーが返ってくる。

KeyError: 'ばなな'

ばななの値段がもらった辞書にありません、とのこと。

③辞書中にキーがあるかどうかで分岐し、キーがあった場合は置換、キーがなかった場合は据え置きすることにしたい。

辞書中にキーがあるかどうかは、以下の構文で分かる。

"りんご" in Jisho

を実行すると、Trueが返ってくる。Boolが返ってくるので、そのままif文に入れ込めそうな気がする。

④リスト内包表記で記載してみる。

Lis=["りんご","ぶどう","みかん","みかん","ばなな"]
[Jisho[i] if i in Jisho else i for i in Lis]

を実行すると、[200, 300, 100, 100, 'ばなな']が返ってくる。

ばななの値段が分かれば合計できそう。

 

もっと根本的に素早くできそうな気がする。

 

おわり