ni_haruのブログ

ほぼ日記

Pythonで言語処理100本ノックを解く 04. 元素記号

Python言語処理100本ノックを解いてみます。
5本目です。

環境

Ubuntu 16.04.3 LTS
Python 3.5.2

04. 元素記号

"Hi He Lied Because Boron Could Not Oxidize Fluorine. New Nations Might Also Sign Peace Security Clause. Arthur King Can."という文を単語に分解し,1, 5, 6, 7, 8, 9, 15, 16, 19番目の単語は先頭の1文字,それ以外の単語は先頭に2文字を取り出し,取り出した文字列から単語の位置(先頭から何番目の単語か)への連想配列(辞書型もしくはマップ型)を作成せよ.

解答

# -*- coding: utf-8 -*-

if __name__ == "__main__":
    ele_str = "Hi He Lied Because Boron Could Not Oxidize Fluorine. New Nations Might Also Sign Peace Security Clause. Arthur King Can."
    single_list = [1, 5, 6, 7, 8, 9, 15, 16, 19]
    dict = {i+1:s[0] if i+1 in single_list else s[:2] for i,s in enumerate(ele_str.split())}
    print(dict)

出力内容

{1: 'H', 2: 'He', 3: 'Li', 4: 'Be', 5: 'B', 6: 'C', 7: 'N', 8: 'O', 9: 'F', 10: 'Ne', 11: 'Na', 12: 'Mi', 13: 'Al', 14: 'Si', 15: 'P', 16: 'S', 17: 'Cl', 18: 'Ar', 19: 'K', 20: 'Ca'}

内包表記ってリストだけかと思っていましたが、辞書やセットにも使えるんですね。
「:」の前後に key と value をそれぞれ記載しています。

余談

この問題だと、12番目のマグネシウムが "Mi" となってしまいます。(正しくは "Mg" )
"Mg" で始まる単語が無かったのでしょうか…。