【Python,JSON】辞書型の活用

2025 年 6 月 9 日 by yamamotor

1.はじめに

Pythonでは辞書型を利用することが多くあります。

また、PythonではJSONファイルを辞書型として扱うことが出来るため、

JSONファイルを上手く使いこなすことで、より使いやすいプログラムを作成することが出来ます。

今回は簡単な辞書型の利用方法から、階層が深いような辞書型の利用方法まで、様々なものを紹介します。

2.JSONファイルから取得した一般的な辞書型のバリューをキーから検索する

下記のようなJSONファイル(test_1.json)を用意しました。

{
    "key1": "value1",
    "key2": "value2",
    "key3": "value3",
    "key4": "value4"
}

上記のJSONをPythonで読み取り、キーで検索をかけていきます。

実装したコードは下記の通りです。

import json

# JSONファイルを読み込む関数
def load_json(file_path):
    with open(file_path, 'r', encoding='utf-8') as file:
        data = json.load(file)
    return data

# JSONファイルを読み込む
file_path = 'test_1.json'
data = load_json(file_path)

# key1で検索
print(data["key1"]) # value1

こちらは一般的なため、特に解説はしません。

3. JSONファイルから取得した一般的な辞書型のキーをバリューから検索する

2と同様のJSONファイルを利用し、バリューで該当のキーを検索します。

実装したコードは下記の通りです。

import json

# JSONファイルを読み込む関数
def load_json(file_path):
    with open(file_path, 'r', encoding='utf-8') as file:
        data = json.load(file)
    return data

# JSONファイルを読み込む
file_path = 'test_1.json'
data = load_json(file_path)

# value1で検索
key = [k for k, v in data.items() if v == "value1"]
print(key) # key1

上記では内包表記を使って辞書の中から検索対象のバリューに対応するキーを検索しています。

バリューが検索対象と一致する場合には、そのキーをリストに追加します。

最後に追加されたキーを出力しています。

4.JSONファイルから取得した複雑な辞書型のバリューをキーから検索する

下記のようなJSONファイル(test_2.json)を用意しました。

{
    "key1":
    {
        "key1_1": "value1_1",
        "key1_2": "value1_2",
        "key1_3": "value1_3",
        "key1_4": "value1_4"
    },
    "key2":
    {
        "key2_1": "value2_1",
        "key2_2": "value2_2",
        "key2_3": "value2_3",
        "key2_4": "value2_4"
    }
}

上記のJSONファイル内を再帰的にキーで検索します。

実装したコードは下記の通りです。

import json

# JSONファイルを読み込む関数
def load_json(file_path):
    with open(file_path, 'r', encoding='utf-8') as file:
        data = json.load(file)
    return data

# JSONファイルを読み込む
file_path = 'test_2.json'
data = load_json(file_path)

# 再帰的に検索条件を設定して値を取得する
def search_value(data, search_key):
    if isinstance(data, dict):
        for key, value in data.items():
            if key == search_key:
                return value
            elif isinstance(value, (dict, list)):
                result = search_value(value, search_key)
                if result is not None:
                    return result
    elif isinstance(data, list):
        for item in data:
            result = search_value(item, search_key)
            if result is not None:
                return result
    return None

# key2_3の値を検索する
search_key = 'key2_3'
result = search_value(data, search_key)
print(result) # value2_3

上記では、キーの値が辞書型、またはリスト型の場合に、再帰的に関数を呼び出すように記載しています。

また、キーが一致する場合にはその値を返却します。

これにより、複雑な階層のJSONファイル、辞書型の形式でも、指定したキーの値を検索することが可能です。

5.JSONファイルから取得した複雑な辞書型のキーをバリューから検索する

4と同様のJSONファイルを利用し、バリューからキーを再帰的に検索します。

実装したコードは下記の通りです。

import json

# JSONファイルを読み込む関数
def load_json(file_path):
    with open(file_path, 'r', encoding='utf-8') as file:
        data = json.load(file)
    return data

# JSONファイルを読み込む
file_path = 'test_2.json'
data = load_json(file_path)

# 再帰的に値からキーを検索する関数
def search_key(data, search_value):
    if isinstance(data, dict):
        for key, value in data.items():
            if value == search_value:
                return key
            elif isinstance(value, (dict, list)):
                result = search_key(value, search_value)
                if result is not None:
                    return result
    elif isinstance(data, list):
        for item in data:
            result = search_key(item, search_value)
            if result is not None:
                return result
    return None

# value2_3のキーを検索する
search_value = 'value2_3'
result = search_key(data, search_value)
print(result) # key2_3

4と同様に、再帰的にバリューからキーを検索するように記載しています。

こちらも汎用的に検索を行うことが可能です。

6.終わりに

今回は、よく利用するJSONファイルの利用方法を紹介しました。

キーで検索することはもちろんですが、バリューで検索することも時には必要になってくるため、

理解しておくと良いでしょう。

タグ: ,

TrackBack