Pythonでタプルのリストを最初の要素ごとにグループ化する方法
Pythonでは、標準ライブラリ collections モジュールに含まれる defaultdict を使うことで、タプルのリストを「最初の要素」をキーとして簡単にグループ化できます。通常の辞書(dict)と違い、存在しないキーにアクセスしたときに自動的に初期値(ここでは空のリスト)が生成されるため、グループ化処理が非常にシンプルに書けます。
サンプルデータ
まず、次のようなタプルのリストを用意します。
lst = [
(1, 'Hello', 'World', 112),
(2, 'Hello', 'People', 42),
(2, 'Hi', 'World', 200)
]このリストは、各タプルの先頭の数値(1 または 2)をキーとして分類したいデータです。
defaultdict を使ったグループ化
defaultdict(list) を作成し、各タプルを展開しながら先頭の要素をキー、残りの要素を値として追加していきます。
from collections import defaultdict
d = defaultdict(list)
for k, *v in lst:
d[k].append(v)
print(d)ポイントは k, *v というアンパックの書き方です。これにより、タプルの最初の要素が k に、残りのすべての要素がリストとして v に代入されます。
実行結果
defaultdict(<class 'list'>, {1: [['Hello', 'World', 112]], 2: [['Hello', 'People', 42], ['Hi', 'World', 200]]})同じキー(1 や 2)を持つタプルの残りの部分が、それぞれリストにまとめられていることがわかります。
結果をタプル形式に戻すには
グループ化された状態を保ったまま、結果をタプルとして扱いたい場合は d.items() を tuple() で変換します。
コード例
print(tuple(d.items()))
実行結果
((1, [['Hello', 'World', 112]]), (2, [['Hello', 'People', 42], ['Hi', 'World', 200]]))
まとめ
defaultdict(list)を使うと、キーの存在チェックなしでグループ化処理が書ける。for k, *v in lst:のアンパック構文で、先頭要素とそれ以外を簡単に分離できる。tuple(d.items())で、辞書形式の結果をタプル形式に変換できる。
この手法は、ログデータやCSVのレコードなど、先頭の識別子ごとにデータをまとめたい場面で非常に便利です。ぜひ活用してみてください。
-
Pythonで「Hello World!」を表示する方法|printの基本をわかりやすく解説
Pythonで画面に文字を出力する基本:print Pythonで画面(標準出力)に文字列を表示する最も基本的な方法は、printを使うことです。 >>> print Hello, world Hello, world このようにprintの後に表示したい文字列を書くだけで、ターミナルやコンソールにその内容が出力されます。 複数の値をスペース区切りで表示する 同じ行に複数の文字列などを表示したい場合は、各要素をカンマ(,)で区切ります。カンマの間には自動的に半角スペースが挿入されます。 >>> print Hello,, World Hello, Worl
-
Pythonで文字列の先頭の空白(スペース・タブ・改行)をすべて削除する方法
lstrip()メソッドで先頭の空白を削除するPythonで文字列の先頭にある空白文字(半角スペース、タブ、改行など)をすべて削除したい場合は、lstrip()メソッドを使用します。引数を指定しないで呼び出すと、文字列の先頭に連続するすべての空白文字が取り除かれます。>>> hello world!.lstrip() hello world!このように、インデントや改行コードなどで汚れた文字列の先頭を簡単にきれいにすることができます。strip()メソッドで両端の空白を同時に削除する文字列の先頭と末尾(両端)の空白を一度に削除したい場合は、strip()メソッドが便