2017-02-18 1 views
0

Ich habe ein Wörterbuch als solche -Python Schreiben ein Wörterbuch in Textdatei erzeugt nicht korrekte Ausgabe

d = {"Dave":("Male", "96"), "Alice":("Female", "98")}

Ich möchte es in einem solchen Format in eine Textdatei schreiben -

Dave 
Male 
96 
Alice 
Female 
98 

Dies ist meine aktuellen Code -

d = {"Dave":("Male", "96"), "Alice":("Female", "98")} 

with open("dictionary.txt", 'w') as f: 
    for key, value in d.items(): 
    f.write('%s \n %s \n' % (key, value)) 

Es ist jedoch die Herstellung t er folgende Ausgabe in der Textdatei:

Dave 
    ('Male', '96') 
Alice 
    ('Female', '98') 

Wie kann ich das einstellen? Bitte helfen! Vielen Dank.

+0

Der Wert jedes dict-Elements ist ein Tupel. Anstatt das Tupel zu schreiben, schreibe jedes Element des Tupels mit 'value [0]' und 'value [1]'. – justincai

+1

Verwenden Sie eine andere Schleife, um jedes Mitglied des Tupels –

+0

@jeffcarey auszudrucken, bitte beziehen Sie sich auf meine eigene Antwort unten! –

Antwort

2

Wenn Sie eine tuple einen str mit Formatierung konvertieren, erhalten Sie die Darstellung des Tupels, das ist (etwa gibt es zwei Methoden __str__ und __repr__ tatsächlich) welche Python druckt, wenn Sie print das Element in der Konsole .

Um Elemente ohne die Tupeldekorationen zu erhalten, müssen Sie das Tupel entpacken. Eine Option (mit format):

for key, value in d.items(): 
    f.write("{}\n{}\n{}\n".format(key,*value)) 

* entpackt die Elemente von value in 2 Elemente. format erledigt den Rest

Eine noch kompaktere Art und Weise die Formatzeichenfolge von 3 (weniger copy/paste)

for key, value in d.items(): 
    f.write(("{}\n"*3).format(key,*value)) 
1

Ich benutzte die i in range Methode, die eine Iteration für jeden Wert in allen Tonarten zu multiplizieren wäre -

d = {"Dave":("Male", "96"), "Alice":("Female", "98")} 

with open("dictionary.txt", 'w') as f: 
    for key, value in d.items(): 
     for x in range(0,2): 
      f.write('%s \n %s \n' % (key, value[x])) 
+0

Dies würde den Namen jede zweite Zeile wiederholen. –

+0

Schließen. Schreibe den Schlüssel in die äußere Schleife, dann die Werte in die innere Schleife. –

0
d = {"Dave":("Male", "96"), "Alice":("Female", "98")} 
with open("dictionary.txt", 'w') as f: 
    for key in d.keys(): 
     f.write('%s \n' % (key)) 
     for v in d[key]: 
      f.write('%s \n' % (v)) 
+0

plz versuche das jetzt .. –

1

folgende Arbeiten in Python 3.6:

d = {"Dave":("Male", "96"), "Alice":("Female", "98")} 
with open('dictionary.txt', mode='w') as f: 
    for name, (sex, age) in d.items(): 
     f.write(f'{name}\n{sex}\n{age}\n') 

Sie können das Tupel an der Oberseite der for Schleife entpacken. Darüber hinaus können Sie in Python 3.6 den f-string-Mechanismus verwenden, um Variablenwerte direkt in Zeichenfolgen zu interpolieren.

Verwandte Themen