Einen Text nach Länge der Wörter sortieren

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Montivs
User
Beiträge: 1
Registriert: Montag 24. Juni 2019, 17:22

Hallo hiermit bitte ich euch um die Hilfe bei diesem Code..

Ich habe einen langen Text und ich muss ihn nach Länge der Wörter, die im Text sind, sortieren.

Output sollte so aussehen:
Word lenght 4: [ ‘code’, ‘show’, ‘good’......]
Word lenght 5:[ ‘pizza’, ‘jumbo’ .....]

Text = [...........]
my_text = text.split()

my_text sind jetzt einzelne strings und die muss ich nur noch nach der Länge zuordnen und dann das ganze alphabetisch sortieren

Länge von Strings :

for i in range(0, len(my_text)):
word_lenght = len(my_text)

Leider weiß ich jetzt nicht wie ich aus dieser Funktion eine Liste bilden kann und wie ich die Liste von Längen mit den Wörter in dict zusammenfügen kann.
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

`my_text` ist ein schlechter Variablenname für eine Liste mit Wörtern. `words` wäre passender.
Was Du brauchst ist ein Wörterbuch, wo der Schlüssel die Länge ist und der Wert eine Liste mit Wörtern dieser Länge. `defaultdict` ist da immer sehr hilfreich und dann eine Schleife über alle Wörter, nicht über den Index!

Code: Alles auswählen

from collections import defaultdict
words = text.split()
length_to_words = defaultdict(list)
for word in words:
    # hier ein Wörterbuchzugriff mit der Länge des Wortes
Benutzeravatar
__blackjack__
User
Beiträge: 13068
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Wenn man es nicht unbedingt selbst programmieren möchte, gibt es da auch schon was von Ratio…, äh, im `more_itertools`-Modul:

Code: Alles auswählen

In [80]: text
Out[80]: 'code pizza show jumbo good'

In [81]: more_itertools.map_reduce(text.split(), len)
Out[81]: defaultdict(None, {4: ['code', 'show', 'good'], 5: ['pizza', 'jumbo']})
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

Warum ist die Factory des defaultdict `None`, wo doch Listen erzeugt werden?
Benutzeravatar
__blackjack__
User
Beiträge: 13068
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Sirius3: Laut Dokumentation damit sich das am Ende wie ein normales Wörterbuch verhält das bei nicht vorhandenen Schlüsseln mit einem `KeyError` reagiert.

Code: Alles auswählen

In [85]: d
Out[85]: defaultdict(None, {4: ['code', 'show', 'good'], 5: ['pizza', 'jumbo']})

In [86]: d[42]
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-86-647d64566acd> in <module>()
----> 1 d[42]

KeyError: 42
Und Listen sind es auch nur wenn man `map_reduce()` bei `reducefunc` nichts übergibt, beziehungsweise etwas übergibt was eine Liste als Ergebnis hat.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten