Python
 Computer >> コンピューター >  >> プログラミング >> Python

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 の利用がおすすめです。このチュートリアルについて不明な点がある場合は、コメント欄でお気軽にお尋ねください。

  1. Pythonで0と1のバイナリリストを整数(10進数)に変換する2つの方法

    Pythonでは、0と1で構成される2進数のリストを10進数の整数に変換したい場面がよくあります。例えば、センサーデータや画像処理などでビット列を扱う際に必要となる処理です。本記事では、int()関数を使う方法とビット左シフト演算子を使う方法の2つのアプローチを、サンプルコードと実行結果付きでわかりやすく解説します。 方法1:int()関数を使う int()関数は2つの引数を受け取ることができ、第2引数で入力の基数を指定できます。構文は以下のとおりです。 int(x, base=10) 数値または文字列 x から整数オブジェクトを生成して返します。 以下の例では、まずリストの各要素を文字列

  2. 【Python入門】リスト・タプル・辞書の違いを徹底解説

    Pythonの3大コレクション:リスト、タプル、辞書 Pythonには複数のデータをまとめて扱うためのコレクション型が用意されています。中でもよく使われるのがリスト(list)、タプル(tuple)、辞書(dict)の3つです。それぞれ特徴が異なるため、用途に応じて使い分けることが重要です。 基本的な違いの概要 リストとタプルはシーケンス(順序付き)オブジェクトであり、要素を順番に並べて管理します。一方、辞書はキーと値のペアを格納するハッシュテーブル構造です。 リストとタプルは「順序を持つコレクション」ですが、辞書は「順序を持たないコレクション」として扱われます。 リストと辞書はミュータブ