簡単にやる方法で詰まったのでメモ
やりたいこと
dict1の{}内の項目名とdict2のkeyが一致するときにdict2のvalueで置き換えたい
dict1 = {"name": "{answer1}", "age": "{answer2}"}
dict2 = {"answer1": "tarou", "answer2": 20}
最終的な値
dict3 = {'name': 'tarou', 'age': '20'}
実現ソース
dict3 = {k: v.format(**dict2) for k, v in dict1.items()}
関数化するとこんな感じ?
def format_dict_values(target_dict, format_dict):
"""
辞書の値を別の辞書の値でフォーマットします。
Args:
target_dict (dict): フォーマットする対象の辞書
format_dict (dict): フォーマットに使用する値を持つ辞書
Returns:
dict: フォーマットされた値を持つ新しい辞書
"""
return {k: v.format(**format_dict) for k, v in target_dict.items()}
説明
以降はChatGPtに詳しい説明を求めました!
-
辞書の内包表記:
-
dict3
は辞書の内包表記を使って作成されています。これはリスト内包表記と似ていますが、辞書を作成するためのものです。
-
-
dict1.items()
:-
dict1
のキーと値のペアを取得します。dict1
は{"name": "{answer1}", "age": "{answer2}"}
です。
-
-
v.format(**dict2)
:-
v
はdict1
の値 ("{answer1}"
や"{answer2}"
) です。 -
v.format(**dict2)
は、v
の中のプレースホルダー ({answer1}
や{answer2}
) をdict2
の対応する値で置き換えます。
-
-
辞書の生成:
- 各キー
k
に対して、値v
をdict2
の値でフォーマットした結果を新しい辞書dict3
に格納します。
- 各キー
具体例
-
dict1
={"name": "{answer1}", "age": "{answer2}"}
-
dict2
={"answer1": "tarou", "answer2": 10}
この場合、dict3
は次のように生成されます:
-
name
の値は"{answer1}"
で、answer1
をtarou
に置き換えると"tarou"
になります。 -
age
の値は"{answer2}"
で、answer2
を 20 に置き換えると20
になります。
したがって、dict3
は {"name": "tarou", "age": 20}
になります。
まとめ
今回はdict1
の各値の中のプレースホルダーを dict2
の対応する値で置き換えた新しい辞書 dict3
の作成方法をまとめました。