Seite 1 von 1

Einen Text nach Länge der Wörter sortieren

Verfasst: Montag 24. Juni 2019, 18:07
von Montivs
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.

Re: Einen Text nach Länge der Wörter sortieren

Verfasst: Montag 24. Juni 2019, 18:27
von Sirius3
`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

Re: Einen Text nach Länge der Wörter sortieren

Verfasst: Dienstag 25. Juni 2019, 09:13
von __blackjack__
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']})

Re: Einen Text nach Länge der Wörter sortieren

Verfasst: Dienstag 25. Juni 2019, 09:44
von Sirius3
Warum ist die Factory des defaultdict `None`, wo doch Listen erzeugt werden?

Re: Einen Text nach Länge der Wörter sortieren

Verfasst: Dienstag 25. Juni 2019, 10:40
von __blackjack__
@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.