Pythonで辞書のリストからキーごとの最大値を抽出する方法
複数の辞書が格納されたリストから、キーごとに最大値を取り出したいケースはよくあります。このような場合は、シンプルな反復処理(イテレーション)を使うことで効率的に実現できます。本記事では、辞書のリストを走査しながら、同じキーが現れた際に最大値を保持する方法を解説します。
サンプルコード
以下に具体的な実装例を示します。
my_list = [{"Python": 8, "is": 1, "fun": 9}, {"Python": 2, "is": 9, "fun": 1}, {"Python": 5, "is": 10, "fun": 7}]
print("The list is :")
print(my_list)
result = {}
for dic in my_list:
for key, value in dic.items():
if key in result:
result[key] = max(result[key], value)
else:
result[key] = value
print("The result is :")
print(result)
出力
The list is :
[{'Python': 8, 'is': 1, 'fun': 9}, {'Python': 2, 'is': 9, 'fun': 1}, {'Python': 5, 'is': 10, 'fun': 7}]
The result is :
{'Python': 8, 'is': 10, 'fun': 9}
処理の流れと解説
まず、辞書を要素とするリストを定義し、その内容をコンソールに表示します。
結果を格納するための空の辞書
resultを作成します。外側のループで、リスト内の各辞書を順番に走査します。
内側のループでは、
items()メソッドを使って各辞書のキーと値のペアを取り出します。キーがすでに
resultに存在する場合は、max()関数で既存の値と新しい値を比較し、大きい方を代入します。キーがまだ存在しない場合は、その値をそのまま
resultに登録します。すべての走査が完了した後、最終的な結果がコンソールに出力されます。
より簡潔な書き方:辞書内包表記を活用
同様の処理は、辞書内包表記と set().union() を組み合わせることで、より簡潔に記述することもできます。
result = {key: max(d[key] for d in my_list if key in d) for key in set().union(*my_list)}
print(result)
この方法でも出力は同じく {'Python': 8, 'is': 10, 'fun': 9} となります。可読性を重視するならforループ方式、コード量を抑えたいなら内包表記方式を選ぶとよいでしょう。
-
連続する「1」を含まないバイナリ文字列の数を数えるPythonプログラム
この記事では、「連続する1が存在しないバイナリ文字列の総数を求める」という問題の解き方について、Pythonでの実装例を交えながら詳しく解説します。 問題文 問題: 正の整数 N が与えられます。このとき、長さ N のバイナリ文字列(0と1のみで構成される文字列)のうち、連続する「1」が一切含まれないものの総数を求めてください。 例えば N = 3 の場合、有効な文字列は「000」「001」「010」「100」「101」の5つとなり、「011」「110」「111」は連続する1を含むため除外されます。 アプローチ:動的計画法 この問題は動的計画法(DP)を使うことで効率的に解けます。各桁の状態を
-
【Python】約数の個数が偶数か奇数かを判定するプログラムの書き方
この記事では、ある整数の約数の個数が偶数か奇数かを判定するPythonプログラムについて、その考え方と実装方法をわかりやすく解説します。 問題文 ある数「n」が与えられたとき、その約数の総数が偶数であるか奇数であるかを判定してください。 例えば、n = 10 の場合、約数は 1, 2, 5, 10 の4つなので「偶数」。一方、n = 100 の場合は 1, 2, 4, 5, 10, 20, 25, 50, 100 の9つとなり「奇数」となります。 アプローチ:約数を実際に数える 最も基本的な方法は、すべての約数を見つけ、その個数が偶数か奇数かをチェックすることです。 ここで重要なのは、約数