Heim  >  Artikel  >  Backend-Entwicklung  >  Hier ist ein passender Titel für Ihren Artikel, unter Berücksichtigung des Fragenformats: So gruppieren Sie Datenpaare nach Typ in Python: Effiziente Lösungen mit „defaultdict' und „itertools.groupby'.

Hier ist ein passender Titel für Ihren Artikel, unter Berücksichtigung des Fragenformats: So gruppieren Sie Datenpaare nach Typ in Python: Effiziente Lösungen mit „defaultdict' und „itertools.groupby'.

Linda Hamilton
Linda HamiltonOriginal
2024-10-27 07:06:03842Durchsuche

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-Gruppierung nach

Problem:

Gegeben ist ein Satz von Datenpaaren, wobei das erste Element der Wert und der ist Das zweite Element ist der Typ. Gruppieren Sie sie nach dem Typ.

Beispiel:

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

Gewünschtes Ergebnis:

result = [
  {
    'type': 'KAT',
    'items': ['11013331', '9843236']
  },
  {
    'type': 'NOT',
    'items': ['9085267', '11788544']
  },
  {
    'type': 'ETH',
    'items': ['5238761', '962142', '7795297', '7341464', '5594916', '1550003']
  },
]

Lösung:

Schritt 1: Erstellen Sie ein Wörterbuch

  • Verwenden Sie „collections.defaultdict“, um ein Wörterbuch mit Schlüsseln zu erstellen sind Elementtypen und Werte sind Listen zum Speichern von Werten.
  • Fügen Sie für jedes Datenpaar den Wert an die Liste entsprechend seinem Typ hinzu.

Schritt 2: Konvertieren in Erwartetes Format

  • Konvertieren Sie das Wörterbuch in das erwartete Format, indem Sie seine Elemente durchlaufen und Wörterbücher mit den Schlüsseln „Typ“ und „Elemente“ erstellen.

Beispielcode:

<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>

Alternative Lösung mit itertools.groupby:

Hinweis: Dieser Ansatz erfordert, dass die Eingabe erfolgt sortiert.

  • Sortieren Sie die Datenpaare nach ihrem Typ.
  • Verwenden Sie itertools.groupby, um Datenpaare nach Typ zu gruppieren.
  • Iterieren Sie über die gruppierten Elemente, um sie zu erstellen das gewünschte Ausgabeformat.

Beispielcode:

<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>

Hinweis zur Schlüsselreihenfolge:

  • In Python-Versionen vor 3.7 ist die Einfügereihenfolge für Wörterbücher nicht garantiert. Um die Reihenfolge mit der Eingabe konsistent zu halten, verwenden Sie „collections.OrderedDict“.
  • In Python 3.7 und höher behalten Wörterbücher standardmäßig die Einfügereihenfolge bei.

Das obige ist der detaillierte Inhalt vonHier ist ein passender Titel für Ihren Artikel, unter Berücksichtigung des Fragenformats: So gruppieren Sie Datenpaare nach Typ in Python: Effiziente Lösungen mit „defaultdict' und „itertools.groupby'.. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn