0
1

辞書型①のvalue値が辞書型②のkey名と一致する時に辞書型②のvalueで書き換える方法

Last updated at Posted at 2024-07-19

簡単にやる方法で詰まったのでメモ

やりたいこと

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に詳しい説明を求めました!

  1. 辞書の内包表記:

    • dict3 は辞書の内包表記を使って作成されています。これはリスト内包表記と似ていますが、辞書を作成するためのものです。
  2. dict1.items():

    • dict1 のキーと値のペアを取得します。dict1{"name": "{answer1}", "age": "{answer2}"} です。
  3. v.format(**dict2):

    • vdict1 の値 ("{answer1}""{answer2}") です。
    • v.format(**dict2) は、v の中のプレースホルダー ({answer1}{answer2}) を dict2 の対応する値で置き換えます。
  4. 辞書の生成:

    • 各キー k に対して、値 vdict2 の値でフォーマットした結果を新しい辞書 dict3 に格納します。

具体例

  • dict1 = {"name": "{answer1}", "age": "{answer2}"}
  • dict2 = {"answer1": "tarou", "answer2": 10}

この場合、dict3 は次のように生成されます:

  • name の値は "{answer1}" で、answer1tarou に置き換えると "tarou" になります。
  • age の値は "{answer2}" で、answer2 を 20 に置き換えると 20 になります。

したがって、dict3{"name": "tarou", "age": 20} になります。

まとめ

今回はdict1 の各値の中のプレースホルダーを dict2 の対応する値で置き換えた新しい辞書 dict3 の作成方法をまとめました。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1