Pythonでタプルのリストをキーごとにグループ化して合計する方法
このチュートリアルでは、複数のリストに存在する同じキーを持つ値をすべて合計するPythonプログラムを作成します。まず、具体的な例を見て、やりたいことを確認しましょう。
入力データ
list_one = [('a', 2), ('b', 3), ('c', 5)]
list_two = [('c', 7), ('a', 4), ('b', 2)]
期待される出力
[('a', 6), ('b', 5), ('c', 12)]
各キー('a'、'b'、'c')について、両方のリストの値が足し合わされています。例えば 'a' は 2 + 4 = 6、'c' は 5 + 7 = 12 となります。
解決手順
この問題は、次の手順で解決できます。
- リストを初期化する
dict()を使って最初のリストを辞書に変換し、変数に格納する- 2番目のリストを反復処理し、辞書内の対応するキーに値を加算する
- 結果を出力する
方法1:dictとforループを使う
# リストの初期化
list_one = [('a', 2), ('b', 3), ('c', 5)]
list_two = [('c', 7), ('a', 4), ('b', 2)]
# list_one を辞書に変換
result = dict(list_one)
# 2番目のリストを反復処理
for tup in list_two:
# 辞書にキーが存在するか確認
if tup[0] in result:
result[tup[0]] = result.get(tup[0]) + tup[1]
# 結果をタプルのリストとして出力
print(list(result.items()))
実行結果
上記のコードを実行すると、次の出力が得られます。
[('a', 6), ('b', 5), ('c', 12)]
方法2:Counterを使った簡潔な方法
collectionsモジュールの Counter を使えば、リストを明示的に反復処理することなく、同じ問題をもっと簡潔に解決できます。Counter オブジェクト同士を加算すると、同じキーの値が自動的に合計されるという特性を利用します。
サンプルコード
# Counterをインポート
from collections import Counter
# リストの初期化
list_one = [('a', 2), ('b', 3), ('c', 5)]
list_two = [('c', 7), ('a', 4), ('b', 2)]
# Counter同士を加算して結果を取得
result = Counter(dict(list_one)) + Counter(dict(list_two))
# 結果をタプルのリストとして出力
print(list(result.items()))
実行結果
上記のコードを実行すると、次の出力が得られます。
[('a', 6), ('b', 5), ('c', 12)]
まとめ
今回は、複数のタプルリストから同じキーの値を合計する2つの方法を学びました。
- dict + forループ: 基本的な方法で、処理の流れが把握しやすい
- Counter: コードが短く、可読性に優れている
データ量が多い場合や、コードの簡潔さを重視したい場合は Counter の利用がおすすめです。このチュートリアルについて不明な点がある場合は、コメント欄でお気軽にお尋ねください。
-
Pythonで0と1のバイナリリストを整数(10進数)に変換する2つの方法
Pythonでは、0と1で構成される2進数のリストを10進数の整数に変換したい場面がよくあります。例えば、センサーデータや画像処理などでビット列を扱う際に必要となる処理です。本記事では、int()関数を使う方法とビット左シフト演算子を使う方法の2つのアプローチを、サンプルコードと実行結果付きでわかりやすく解説します。 方法1:int()関数を使う int()関数は2つの引数を受け取ることができ、第2引数で入力の基数を指定できます。構文は以下のとおりです。 int(x, base=10) 数値または文字列 x から整数オブジェクトを生成して返します。 以下の例では、まずリストの各要素を文字列
-
【Python入門】リスト・タプル・辞書の違いを徹底解説
Pythonの3大コレクション:リスト、タプル、辞書 Pythonには複数のデータをまとめて扱うためのコレクション型が用意されています。中でもよく使われるのがリスト(list)、タプル(tuple)、辞書(dict)の3つです。それぞれ特徴が異なるため、用途に応じて使い分けることが重要です。 基本的な違いの概要 リストとタプルはシーケンス(順序付き)オブジェクトであり、要素を順番に並べて管理します。一方、辞書はキーと値のペアを格納するハッシュテーブル構造です。 リストとタプルは「順序を持つコレクション」ですが、辞書は「順序を持たないコレクション」として扱われます。 リストと辞書はミュータブ