Ich möchte, dass mein Programm nur ein zufälliges Wort aus der Liste in meinem Wörterbuch druckt, aber ich kann nicht die richtige Syntax dafür zu bekommen scheinen. Ich versuchte mit popitem() einen zufälligen Wert aus der Liste zu bekommen, aber es scheint nicht zu funktionieren. Hier ist mein Code:Drucken Sie ein Wort aus einer Liste in einem Wörterbuch (Python)
import random
thesaurus = {
"happy":["glad", "blissful", "ecstatic", "at ease"],
"sad" :["bleak", "blue", "depressed"]
}
# input
phrase = input("Enter a phrase: ")
# turn input into list
part1 = phrase.split()
part2 = list(part1)
newlist = []
for x in part2:
s = thesaurus.get(x, x)
newlist.append(s)
print (newlist)
Wenn zum Beispiel des Eingang
i am happy
Die erwartete Ausgabe
wäre isti am glad
oder irgendein zufälliges Wort aus der Liste im Wörterbuch.
Aber jetzt sieht meine Ausgabe wie folgt:
['i', 'am', ['glad', 'blissful', 'ecstatic', 'at ease']]
ich weiß, dass es ein anderer Thread mit diesem beteiligt ist, aber es scheint nicht, dieses spezielle Problem zu beheben.
Jede Hilfe wäre willkommen!
edit:
Wenn ich diese Formel mit einer importierten Datei mit einer langen Liste von Worten arbeiten erweitert, wie würde ich den Code ändern müssen?
newDict = {}
with open('thesaurus.txt', 'r') as f:
for line in f:
splitLine = line.split()
newDict[(splitLine[0])] = ",".join(splitLine[1:])
print ("Total words in thesaurus: ", len(newDict))
# input
phrase = input("Enter a phrase: ")
# turn input into list
part1 = phrase.split()
part2 = list(part1)
# testing input
newlist = []
for x in part2:
s = newDict[x].pop() if x in newDict else x
s = random.choice(newDict[x]).upper() if x in newDict else x
newlist.append(s)
newphrase = ' '.join(newlist)
print (newphrase)
Probe von Zeilentext im "Thesaurus" file:
abash,humility,fear
Was meinen Sie mit 'thesaurus.get (x, x)'? – Arman
@Arman das zweite 'x' ist ein Standardwert. Die Aussage bedeutet im Wesentlichen "Holen Sie sich den Wert mit Schlüssel' x' oder geben Sie einfach 'x' zurück, wenn kein Wert gefunden wird" – smac89