\

Pythonでは、辞書(dictionary)は一般的に一意のキーを持つことが期待されています。しかし、複数の辞書をマージする際や特定のデータ処理を行う際に、キーの重複が発生することがあります。この記事では、Pythonで辞書の重複キーを扱う方法について説明します。

重複キーのマージ

Pythonの辞書では、同じキーが存在する場合、後から追加された値で上書きされます。しかし、上書きせずに複数の値を保持したい場合もあります。そのような場合、以下のようなコードを使用することができます。

from collections import defaultdict

def merge_dict_values(*dicts):
    r = defaultdict(list)  # listに変更し
    for d in dicts:
        for k, v in d.items():
            if v not in r[k]:  # この値がない場合追加します
                r[k].append(v)
    return r

dic  = {'A':'1', 'B':'2'}
dic1 = {'A':'3', 'B':'2', 'C':'4'}
dic_merged = merge_dict_values(dic, dic1)
print(dic_merged)  # {'A': ['1', '3'], 'B': ['2'], 'C': ['4']}

このコードでは、defaultdictを使用して新しい辞書を作成し、各辞書のキーと値を追加しています。値はリストとして保持され、重複する値は追加されません。

重複キーの排除

一方、辞書のリストから重複する値を排除する方法もあります。以下のコードでは、ジェネレータ式を使用して一意のキーの辞書を作成し、その値をリストとして返しています。

def distinct_by_key(data: list[dict], key: str) -> list[dict]:
    return list({element[key]: element for element in data}.values())

user_list = [
    {"id": 1, "name": "Alice", "age": 25},
    {"id": 2, "name": "Bob", "age": 30},
    {"id": 3, "name": "Charlie", "age": 35},
    {"id": 1, "name": "Alice", "age": 27},
    {"id": 4, "name": "David", "age": 40},
    {"id": 2, "name": "Bob", "age": 32},
]

unique_user_list = distinct_by_key(user_list, "id")
print(unique_user_list)  # [{'id': 1, 'name': 'Alice', 'age': 27}, {'id': 2, 'name': 'Bob', 'age': 32}, {'id': 3, 'name': 'Charlie', 'age': 35}, {'id': 4, 'name': 'David', 'age': 40}]

以上、Pythonで辞書の重複キーを扱う方法について説明しました。これらのテクニックを使うことで、より複雑なデータ処理を行うことが可能になります。

投稿者 admin

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です