##1. はじめに
Rubyには式展開という便利なツールがありPythonにも同じものがあればいいなと思っていたらPythonにもf文字列という形でありました。今回はf文字列を用いて辞書の作成などを行っていこうと思います。
(注1)f文字列はPython3.6で導入された機能です。それ以前のバージョンでは使用できません。
(注2)rubyの式展開とは#{}のことです。
age = 20
puts '私の年齢は#{age}です'
##2. f文字列を用いて辞書の値を表示させる
まずは辞書をつくります。
dict = {}
dict["名前"] = "山田太郎"
dict["年齢"] = 20
次に「私の名前は山田太郎です。」という文と「私の年齢は20歳です。」という文章をf文字列を用いて出力してみます。
dict = {}
dict["name"] = "山田太郎"
dict["age"] = 20
print(f'私の名前は{dict["name"]}です。')
print(f'私の年齢は{dict["age"]}です。')
# 出力結果
# 私の名前は山田太郎です。
# 私の年齢は20です。
f文字列を使い辞書の値を出力させる際の注意点が1つあります。それはf文字列を囲う引用符と辞書のキー囲む引用符と同じ引用符は使えないということです**(例外あり 例外はまとめの後に記載)**。同じ引用符を使うとエラーになります。自分はしばしばf文字列と辞書を囲う引用符を同じにしてエラーになっています。
(2021年3月9日追記 例外をまとめの後に記載)
dict = {}
dict["name"] = "山田太郎"
dict["age"] = 20
print(f'私の名前は{dict['name']}です。')
print(f'私の年齢は{dict['age']}です。')
# 出力結果
# SyntaxError: invalid syntax
また辞書のキーを引用符で囲わなくてもエラーになります。
dict = {}
dict["name"] = "山田太郎"
dict["age"] = 20
print(f'私の名前は{dict[name]}です。')
print(f'私の年齢は{dict[age]}です。')
# 出力結果
# NameError: name 'name' is not defined
##3. まとめ
Python3.6以降ではf文字列を用いて辞書の値を出力させることができます。
あと余談で詳しく書いたのですが、コードの可読性はf文字列の方が良いのでf文字列を使ったほうが良いと思います。
##注3(2021年3月9日訂正のため追記)
この記事を読んでいただいた方からf文字列を囲う引用符と辞書のキー囲む引用符と同じ引用符を使える場合があることを教えていただきました。本当にありがとうございます!そしてここで訂正させていただきます。本当に申し訳ありません。
以下のコードのようにf文字列全体を三重引用符(""")で囲み辞書のキーをダブルクオーテーション(")で囲むとf文字列全体を囲う引用符と辞書のキーを囲う引用符を同じにできるそうです。いや、お見事!
dict = {}
dict["name"] = "山田太郎"
dict["age"] = 20
print(f"""私の名前は{dict["name"]}です。""")
print(f"""私の年齢は{dict["age"]}です。""")
余談 f文字列 VS 文字連結
dict = {}
dict["name"] = "山田太郎"
dict["age"] = 20
print('私の名前は' + dict['name'] + 'です。')
print('私の年齢は' + str(dict['age']) + 'です。')
# 出力結果
# 私の名前は山田太郎です。
# 私の年齢は20です。
2つの例を比較すると前者のf文字列を用いたほうがコードの可読性が良いと思います。「私は山田太郎、20歳、大学1年生です。」という1つの文に「名前」、「年齢」、「学校種別」、「学年」の4つの変数がある文を出力しようとするとさらにf文字列のありがたみが分かると思います。
dict = {}
dict["name"] = "山田太郎"
dict["age"] = 20
dict["school"] = "大学"
dict["grade"] = 1
# f文字列を使った場合
print(f'私は{dict["name"]}、{dict["age"]}歳、{dict["school"]}{dict["grade"]}年生です。')
# f文字列を使わなかった場合
print('私は' + dict['name'] + '、' + str(dict['age']) + '歳、' + dict['school'] + str(dict['grade']) + '年生です。')
# 出力結果
# 私は山田太郎、20歳、大学1年生です。
# 私は山田太郎、20歳、大学1年生です。
##参考文献
Pythonの文字列が標準でf文字列になる(かも)
【Python】文字列の埋め込みにはf文字列を使うべき