In den Anweisungen wurde nach Code gefragt, der die Länge jedes Wortes in einer Zeichenfolge zurückgibt. so als würde es die Anzahl der Buchstaben in jedem Wort zählen und es neben dem Wort drucken, für das ich diesen Code habe:

def word_lengths(a):
    a = a.lower()
    c = list(a)
    a = ""
    for x in c:
        if x == "," or x == "." or x == "'" or x == "!" or x == "?":
            c[c.index(x)] = ""
    for x in c:
        a += x
    y = a.split()
    z = {}
    for x in y:
        z[x] = len(x)
    return z
print(word_lengths("I ate a bowl of cereal out of a dog bowl today."))

Welches gibt zurück:

{'dog': 3, 'bowl': 4, 'a': 1, 'out': 3, 'of': 2, 'ate': 3, 'cereal': 6, 'i': 1, 'today': 5}
3
user9660128 18 Apr. 2018 im 17:07

5 Antworten

Beste Antwort

Verwenden einer einfachen Iteration

Demo:

def word_lengths(s):
    d = {}
    for i in s.split():           #Split by space
        l = len(i)
        if l not in d:            #Create len as key
            d[l] = [i]
        else:
            d[l].append(i)  
    return d


print(word_lengths("I ate a bowl of cereal out of a dog bowl today."))

Ausgabe:

{1: ['I', 'a', 'a'], 2: ['of', 'of'], 3: ['ate', 'out', 'dog'], 4: ['bowl', 'bowl'], 6: ['cereal', 'today.']}
2
Rakesh 18 Apr. 2018 im 14:10

Sie können dies mit defaultdict tun, einer der vielen nützlichen Datenstrukturen im Standardbibliotheksmodul collections.

from collections import defaultdict
import re

def word_lengths(text):
    d = defaultdict(list)
    for word in re.findall(r'\w+', text.lower()):
        d[len(word)].append(word)
    return d

Wir verwenden re.findall, um nur Wörter ohne Leerzeichen und Interpunktion abzugleichen. Wenn Sie Bindestriche und Apostrophe als Wortzeichen einfügen möchten, können Sie den regulären Ausdruck anpassen.

0
Håken Lid 18 Apr. 2018 im 14:24

Kann einfach die Werte schleifen, um ein Diktat zu generieren.

In [1]: c = defaultdict(list)

In [2]: for word in "I ate a bowl of cereal out of a dog bowl today.".split(' '):
...:     c[len(word)].append(word)
...:     

In [3]: c
Out[4]: 
defaultdict(list,
            {1: ['I', 'a', 'a'],
             2: ['of', 'of'],
             3: ['ate', 'out', 'dog'],
             4: ['bowl', 'bowl'],
             6: ['cereal', 'today.']})
0
jackotonye 18 Apr. 2018 im 14:35