質問の形式を念頭に置いて、記事に適したタイトルを以下に示します。 Python でデータペアをタイプ別にグループ化する方法: `defaultdict` と `itertools.groupby` を使用した効率的なソリューション

Linda Hamilton
リリース: 2024-10-27 07:06:03
オリジナル
784 人が閲覧しました

Here's a suitable title for your article, keeping the question format in mind: 

How to Group Data Pairs by Type in Python: Efficient Solutions with `defaultdict` and `itertools.groupby`

Python Group By

問題:

最初の項目が値であり、 2 番目の項目はタイプです。タイプに基づいてグループ化します。

例:

input = [
  ('11013331', 'KAT'),
  ('9085267', 'NOT'),
  ('5238761', 'ETH'),
  ('5349618', 'ETH'),
  ('11788544', 'NOT'),
  ('962142', 'ETH'),
  ('7795297', 'ETH'),
  ('7341464', 'ETH'),
  ('9843236', 'KAT'),
  ('5594916', 'ETH'),
  ('1550003', 'ETH'),
]
ログイン後にコピー

望ましい結果:

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

解決策:

ステップ 1: 辞書を作成する

  • collections.defaultdict を使用して、キーが含まれる辞書を作成します。は項目タイプで、値は値を保存するためのリストです。
  • 各データ ペアについて、そのタイプに対応するリストに値を追加します。

ステップ 2: に変換します予期される形式

  • 項目を反復処理し、「type」キーと「items」キーを使用して辞書を作成することにより、辞書を予期される形式に変換します。

コード例:

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

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

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

itertools.groupby を使用した代替解決策:

注: このアプローチでは、次の入力が必要です。

  • タイプに基づいてデータ ペアを並べ替えます。
  • itertools.groupby を使用してデータ ペアをタイプごとにグループ化します。
  • グループ化された項目を反復して作成します。目的の出力形式。

コード例:

<code class="python">from itertools import groupby, itemgetter

sorted_input = sorted(input, key=itemgetter(1))

groups = groupby(sorted_input, key=itemgetter(1))
output = [{'type': k, 'items': [x[0] for x in v]} for k, v in groups]</code>
ログイン後にコピー

キーの順序に関する注意:

  • 3.7 より前の Python バージョンでは、辞書の挿入順序は保証されません。入力と順序の一貫性を保つには、collections.OrderedDict を使用します。
  • Python 3.7 以降では、辞書はデフォルトで挿入順序を保持します。

以上が質問の形式を念頭に置いて、記事に適したタイトルを以下に示します。 Python でデータペアをタイプ別にグループ化する方法: `defaultdict` と `itertools.groupby` を使用した効率的なソリューションの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!