2017-10-16 2 views
-1

Ein Beispiel wie:Erhalten letzten drei Buchstaben in dict Python

text = ' "west best worst first tapping snapping in a pest the straining 
singing forest living' 
a_dict = get_last_three_letters_dict(text) 
remove_less_than_2(a_dict) 
print("1.") 
print_dict_in_key_order(a_dict)  

text = 'Kublai Khan does not necessarily believe everything Marco Polo says 
when he describes the cities visited on his expeditions but the emperor of 
the Tartars does continue listening to the young Venetian with greater 
attention and curiosity than he shows any other messenger or explorer of his' 
a_dict = get_last_three_letters_dict(text) 
remove_less_than_2(a_dict) 
print("2.") 
print_dict_in_key_order(a_dict) 

Ich versuche, die Zeichenfolge in Kleinbuchstaben zu konvertieren und gibt dann eine Dictionary-Objekt, die Schlüssel, die die letzten drei Buchstaben aller Wörter hat in der Textzeichenfolge mit einer Länge größer als 2 und entsprechenden Werten, die die Anzahl der Wörter in der Parameterzeichenfolge darstellen, die mit diesen letzten drei Buchstaben enden.

Der Test-Code entfernt alle Paare im resultierenden Wörterbuch, wo die letzten drei Buchstaben nur einmal in der Textfolge auftreten, habe ich die Funktion unten versucht, es funktioniert nicht.

def get_last_three_letters_dict(sentence): 
     sentence = dict(sentence) 
     tails = [] 
     for letter in sentence: 
      if len(name) > 2: 
       tails.append(name[-3:].lower()) 
     return (''.join(tails) + ":") 

erwartet:

1. 
est : 4 
ing : 5 
rst : 2 

2. 
han : 2 
his : 2 
ing : 2 
oes : 2 
the : 4 
+0

Was erwarten Sie von 'dict (sentence)'? Es macht keinen Sinn, Diktat auf einen Satz zu setzen. – abccd

Antwort

1

hier ein Lösung, die die letzten drei Buchstaben aller Wörter im Satz, die länger als 2 Buchstaben sind, sammelt und dann ein Diktat der mehr als einmal vorkommenden Wörter zurückgibt.

from collections import Counter 

def get_letter_dict(sentence): 
    sentence = sentence.lower().split() 
    c = Counter(word[-3:] for word in sentence if len(word) > 2) 
    return dict((a,b) for a,b in c.items() if b > 1) 
1

Da die Funktion unterhalb eines Wörterbuchs zurückgibt, die Reihenfolge der Schlüsselwertpaaren wird es Rückkehr ist zufällig zurück. Aber es macht was du wolltest.

(Bemerkt, dass, wenn ich es bearbeitet mit dem Wert 1 Schlüssel-Wert-Paare zu entfernen, habe ich einen Fehler gemacht. Es wurde behoben. Nun sollte es so, wie Sie es arbeiten wollte arbeiten)

def get_last_three_letters_dict(sentence): 
    #Split the sentence into a list of words 
    words = sentence.split() 

    #Create an empty list to store tails in 
    tails = [] 

    #Create list of last three letters of all words with length greater than 2 
    for word in words: 
     if len(word) > 2: 
      tails.append(word[-3:].lower()) 

    #create empty dictionary for word tails + tail frequencies 
    tail_dict = dict() 

    for tail in tails: 
    #Add a key if tail is not already in dictionary. Set its value to 1. 
     if tail not in tail_dict.keys(): 
      tail_dict[tail] = 1 

    #If the tail is already a key, add 1 to its value 
     else: 
      tail_dict[tail] = tail_dict[tail] + 1 

    #Delete key-value pairs with value 1 
    for key in list(tail_dict.keys()): 
     if tail_dict[key] == 1:    
      del tail_dict[key] 
    return tail_dict 
Verwandte Themen