Python で特定のキーに基づいてデータを効率的にグループ化するにはどうすればよいですか?また、このタスクに使用できるさまざまな方法にはどのようなものがありますか?

Linda Hamilton
リリース: 2024-10-27 00:29:02
オリジナル
878 人が閲覧しました

How do you efficiently group data in Python based on a specific key, and what are the different methods available for this task?

Python Group By

キーによるデータのグループ化

Python では、特定のキーによるデータのグループ化には、共通の属性に基づいて項目を整理することが含まれます。これはさまざまな方法で実現でき、大規模なデータセットに効率的なソリューションを提供します。データを効果的にグループ化する方法を見てみましょう。

defaultdict を使用した効率的なグループ化手法

一連のデータ ペアがあり、その目的はそれらのタイプに基づいてグループ化するというシナリオを考えてみましょう。これを実現するには、collections.defaultdict クラスを利用します。不足しているキーがデフォルト値で自動的に初期化される辞書を作成し、これらのキーに項目を追加できるようにします。

<code class="python">from collections import defaultdict

input = [
    ('11013331', 'KAT'),
    ('9085267', 'NOT'),
    ('5238761', 'ETH'),
    ('5349618', 'ETH'),
    ('11788544', 'NOT'),
    ('962142', 'ETH'),
    ('7795297', 'ETH'),
    ('7341464', 'ETH'),
    ('9843236', 'KAT'),
    ('5594916', 'ETH'),
    ('1550003', 'ETH'),
]

res = defaultdict(list)
for v, k in input:
    res[k].append(v)

print([{ 'type': k, 'items': v } for k, v in res.items()])</code>
ログイン後にコピー

出力:

[{'items': ['9085267', '11788544'], 'type': 'NOT'}, {'items': ['5238761', '5349618', '962142', '7795297', '7341464', '5594916', '1550003'], 'type': 'ETH'}, {'items': ['11013331', '9843236'], 'type': 'KAT'}]
ログイン後にコピー

itertools.groupby によるグループ化

もう 1 つのアプローチには、itertools.groupby の使用が含まれます。この関数では、入力を事前にソートする必要があります。指定されたキーの値が同じである連続する要素のグループを生成します。

<code class="python">import itertools
from operator import itemgetter

sorted_input = sorted(input, key=itemgetter(1))
groups = itertools.groupby(sorted_input, key=itemgetter(1))

print([{ 'type': k, 'items': [x[0] for x in v]} for k, v in groups])</code>
ログイン後にコピー

出力:

[{'items': ['5238761', '5349618', '962142', '7795297', '7341464', '5594916', '1550003'], 'type': 'ETH'}, {'items': ['11013331', '9843236'], 'type': 'KAT'}, {'items': ['9085267', '11788544'], 'type': 'NOT'}]
ログイン後にコピー

辞書の挿入順序の維持

前Python 3.7 では、辞書は挿入順序を保持しませんでした。これに対処するために、collections.OrderedDict を使用してキーと値のペアの順序を維持できます。

<code class="python">from collections import OrderedDict

res = OrderedDict()
for v, k in input:
    if k in res:
        res[k].append(v)
    else:
        res[k] = [v]

print([{ 'type': k, 'items': v } for k, v in res.items()])</code>
ログイン後にコピー

ただし、Python 3.7 以降では、通常の辞書は挿入順序を保持するため、OrderedDict は不要です。

以上がPython で特定のキーに基づいてデータを効率的にグループ化するにはどうすればよいですか?また、このタスクに使用できるさまざまな方法にはどのようなものがありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート