2016-08-01 5 views
0

Ich kann kein Muster für die Ergebnisse sehen, die ich auf dem Druck habe. Und ich habe schon andere Lösungen für diese versucht, aber kann es nicht richtig machen = (Wie kann ich dieses Wörterbuch wie die ursprüngliche Zeichenfolge sortieren?

s = "hi hi hi, how are you? you you" 

print(s) 
s = s.replace('?','') 
s = s.replace('!','') 
s = s.replace(',','') 
s = s.replace('.','') 

l = s.split() 

d = {} 

for i, termo in enumerate(l): 
    if not d.get(termo): 
     d[termo] = [] 
    d[termo].append(i+1) 

print ('d:', d) 

Ein Beispiel Ausgabe:.

d: {'you': [6, 7, 8], 'how': [4], 'are': [5], 'hi': [1, 2, 3]} 

d: {'are': [5], 'hi': [1, 2, 3], 'how': [4], 'you': [6, 7, 8]} 
+3

Wörterbücher sind von Natur aus ungeordnet. Verwenden Sie 'collections.OrderedDict'. –

+0

Was ist Ihr Ziel? Ist das Ihre erwartete Ausgabe oder gewünschte Ausgabe? – James

+2

Bitte lesen Sie http://stackoverflow.com/questions/15479928/why-is-the-order-in-python-dictionaries-and-sets-arbitrary – cdarke

Antwort

0

Ein Wörterbuch ist eine ungeordnete Sammlung ein collections.OrderedDict verwenden, statt :

from collections import OrderedDict 

s = "hi hi hi, how are you? you you" 
s = s.translate(None, '?!,.') 
l = s.split() 

d = OrderedDict() 
for i, termo in enumerate(l): 
    d.setdefault(termo, []).append(i) 

print ('d:', d) 

Hinweise:

  • collectins.OrderedDict merkt sich die Reihenfolge, in der Daten hinzugefügt werden. Anschließend findet die Iteration des Wörterbuchs in der gleichen Reihenfolge statt.

  • str.translate() ist eine schnelle Möglichkeit, eine Klasse von Zeichen aus einer Zeichenfolge zu löschen.

  • dict.setdefault() Gibt den Wert eines Wörterbuchs zurück, wenn der Schlüssel vorhanden ist, oder erstellt den Wert andernfalls. Es ersetzt das Muster if x not in d: d[x] = y.

+0

Rob, vielen Dank! =) das war genau was ich brauchte, ich verstehe es jetzt! –

Verwandte Themen