2016-06-16 7 views
0

Ich möchte ein Wörterbuch und eine Liste in einen Satz dekomprimieren. Zum Beispiel:Wie man mit For-Schleifen über ein Wörterbuch iteriert?

newlist = [1, 2, 3, 4, 5, 6] 
new_dictionary = {'code': 2, 'help': 6, 'broken': 4, 'is': 3, 'please': 5, 'my': 1} 

Der ursprüngliche Satz ist 'My code is broken please help'. Die Liste zeigt die Positionen, an denen die Wörter innerhalb des Satzes erscheinen. Das Wörterbuch speichert das Wort und die Position, mit der das Wort assoziiert ist.

Ziel ist es, über das Wörterbuch zu iterieren, bis die Nummer in der Liste übereinstimmt. Sobald dies geschieht, wird der zu dem Wert passende Schlüssel zu einer Liste hinzugefügt. Dies wird so lange passieren, bis keine weiteren Nummern in der Liste sind. Die Liste wird dann in eine Zeichenfolge umgewandelt und an den Benutzer gedruckt.

Ich könnte mir vorstellen, dass so etwas wie dies die Lösung sein würde:

for loop in range(len(newlist)): 
    x = 0 
    for k,v in new_dictionary.items(): 
     if numbers[x] == v: 
       original_sentence.append(k) 
     else: 
       x = x + 1 

print(original_sentence) 

Allerdings druckt der Code nur eine leere Liste. Gibt es eine Möglichkeit, die for-Schleifen neu zu formulieren oder neu anzuordnen, damit der Code funktioniert?

+3

Warum nicht invertieren Sie das Wörterbuch, so dass es Position zu Wort statt Wort zu Position? Dann ist das trivial. – jonrsharpe

+0

Was ist der tatsächliche Anwendungsfall? Was soll dieser Code tun? Wofür verwenden Sie das? Auch was meinst du mit 'Das Ziel ist es, über das Wörterbuch zu iterieren, bis die Nummer in der Liste übereinstimmt ' – Keatinge

+0

Ihr Code würde überhaupt nicht funktionieren, da' original_sentence' und 'numbers' nicht definiert sind. Bitte posten Sie den _actual_ Code, an dem Sie arbeiten. – Selcuk

Antwort

2

Ich nehme an, Sie nicht das Wörterbuch invertieren möchten, so können Sie so etwas wie dies versuchen:

dictionary = {'code': 2, 'help': 6, 'broken': 4, 'is': 3, 'please': 5, 'my': 1} 
numbers = [1, 2, 3, 4, 5, 6] 

sentence = [] 
for number in numbers: 
    for key in dictionary.keys(): 
     if dictionary[key] == number: 
      sentence.append(key) 
      break 
4

Invertieren Sie das Wörterbuch und fahren Sie fort. Probieren Sie den folgenden Code aus.

>>> d = {'code': 2, 'help': 6, 'broken': 4, 'is': 3, 'please': 5, 'my': 1} 
>>> numbers = [1, 2, 3, 4, 5, 6] 
>>> d_inv = {v:k for k,v in d.items()} 
>>> ' '.join([d_inv[i] for i in numbers]) 
'my code is broken please help' 
1

Sortiert die dict mit den Werten.

import operator 
new_dictionary = {'code': 2, 'help': 6, 'broken': 4, 'is': 3, 'please': 5, 'my': 1} 
sorted_x = sorted(new_dictionary.items(), key=operator.itemgetter(1)) 
print ' '.join(i[0] for i in sorted_x) 

Ergebnis

'my code is broken please help' 

Der gesamte Code in einzelnen Zeilen.

In [1]: ' '.join([item[0] for item in sorted(new_dictionary.items(), key=operator.itemgetter(1))]) 
Out[1]: 'my code is broken please help' 
+0

Das funktioniert gut, aber das OP sucht nach dem Satz in der Reihenfolge, die in der Liste mit dem Namen 'newlist = [1, 2, 3, 4, 5, 6] definiert ist. Es wird nur zufällig im Beispiel sortiert. –

+0

@AbdulFatir Sie haben Recht. Es funktioniert nur, wenn die gewünschte Liste in Form einer beitretenden Bestellung vorliegt. –

Verwandte Themen