Pythonで共通キーの値を合計しながら2つの辞書を結合する方法
Pythonでデータ分析を行っていると、2つの辞書を結合する際に、同じキーを持つ要素の値を合計したいという場面に遭遇することがあります。本記事では、共通キーの値を加算しながら辞書を結合する2つの方法を、サンプルコード付きでわかりやすく解説します。
方法1: forループと「|」演算子を使う
まず基本的な方法として、forループで片方の辞書の各キーがもう片方の辞書にも存在するかを確認し、存在すれば値を加算します。その後、Python 3.9以降で利用可能な辞書の「|」(ユニオン)演算子を使って、2つの辞書を1つにマージします。
サンプルコード
dictA = {'Mon': 23, 'Tue': 11, 'Sun': 6}
dictB = {'Wed': 10, 'Mon': 12, 'Sun': 4}
# 共通キーの値を加算
for key in dictB:
if key in dictA:
dictB[key] = dictB[key] + dictA[key]
else:
pass
res = dictA | dictB
print(res)上記のコードを実行すると、以下の結果が得られます。「Mon」と「Sun」は両方の辞書に存在するため、それぞれの値が合計されています。
実行結果
{'Mon': 35, 'Tue': 11, 'Sun': 10, 'Wed': 10}方法2: Counterを使う(おすすめ)
よりシンプルな方法として、標準ライブラリcollectionsモジュールのCounterクラスを利用する方法があります。Counter同士を「+」演算子で足し合わせると、キーを保持したまま一致するキーの値が自動的に加算されます。コードも1行で済み、可読性が高いのが魅力です。
サンプルコード
from collections import Counter
dictA = {'Mon': 23, 'Tue': 11, 'Sun': 6}
dictB = {'Wed': 10, 'Mon': 12, 'Sun': 4}
res = Counter(dictA) + Counter(dictB)
print(res)上記のコードを実行すると、以下の結果が得られます。
実行結果
Counter({'Mon': 35, 'Tue': 11, 'Sun': 10, 'Wed': 10})出力結果がCounterオブジェクトになっている点に注意してください。通常のdict型として扱いたい場合は、dict(res)のように変換することで元の形式に戻せます。
まとめ
共通キーの値を合計しながら辞書を結合するには、forループで手動的に処理する方法と、Counterを使う方法があります。簡潔さとパフォーマンスを重視するならCounterの利用がおすすめです。状況に応じて使い分けましょう。
-
Pythonで2つの数の公約数を求めるプログラムの書き方
はじめに この記事では、以下の問題文に対する解決方法について学んでいきます。 問題文 2つの整数が与えられたとき、それらに共通する約数(公約数)の個数を表示する必要があります。 アプローチの考え方 まず、入力として受け取った2つの数のうち、小さい方の値(最小値)を計算します。続いて、1からその最小値までの各値で2つの数を順番に割っていき、両方の数を割り切ることができるかどうかをループ処理で確認します。 条件が真(True)と評価されるたびに、カウンターを1ずつ増加させます。最終的なカウンターの値が、2つの数の公約数の個数となります。 実装例 それでは、以下のコードで実際の実装を見てみましょう。
-
Pythonで辞書の値を更新する方法|update()メソッドの使い方を解説
Pythonの組み込み型である辞書(dict)クラスには、update()メソッドが標準で用意されています。このメソッドは、別の辞書オブジェクトを引数として受け取り、呼び出し元の辞書にマージ(統合)することができます。 基本構文 D1.update(D2) 動作の仕組み D2の内容がD1に統合されます。このとき、キーの有無によって以下のように挙動が変わります。 D2のキーがD1にすでに存在する場合:そのキーの値がD2の値で上書き(更新)されます。 D2のキーがD1に存在しない場合:新しいキーと値のペアとしてD1に追加されます。 実行後、D1は更新された内容を保持します。 使用例 >&