2009-05-29 8 views
1

Ich habe ein Wörterbuch, das eine Zeichenfolge als Schlüssel und eine Ganzzahl als Wert speichert. In meiner Ausgabe möchte ich den Schlüssel als eine Zeichenfolge ohne Klammern oder Kommas angezeigt haben. Wie würde ich das tun?Formatieren der Ausgabe eines Schlüssels aus einem Wörterbuch

for f_name,f_loc in dict_func.items(): 
     print ('Function names:\n\n\t{0} -- {1} lines of code\n'.format(f_name, f_loc)) 

Ausgang:

Enter the file name: test.txt 
line = 'def count_loc(infile):' 

There were 19 lines of code in "test.txt" 

Function names: 

    ('count_loc(infile)',) -- 15 lines of code 

Nur incase es nicht klar war, würde ich die letzte Zeile der Ausgabe gerne als angezeigt werden:

count_loc(infile) -- 15 lines of code 

EDIT

name = re.search(func_pattern, line).groups() 
name = str(name) 

Mit type() vor meiner Ausgabe, ich veri fied es bleibt eine Zeichenfolge, aber die Ausgabe ist so, wie es war, als Name ein Tupel war

Antwort

3

auf Peter's answer zu erarbeiten, sieht es für mich wie Sie eine sind zuweisen One-Item tuple als der Schlüssel Ihres Wörterbuchs. Wenn Sie einen Ausdruck irgendwo in Klammern auswerten und diesen als Schlüssel verwenden, achten Sie darauf, dass darin kein Streukomma enthalten ist.

Wenn Sie Ihre weiter bearbeitete Antwort betrachten, ist dies in der Tat so, weil Sie die Methode groups() Ihrer Regex-Übereinstimmung verwenden. Das gibt ein Tupel von (the entire matched section + all the matched groups) zurück, und da Sie keine Gruppen haben, wollen Sie die ganze Sache. group() ohne Parameter wird Ihnen das geben.

+0

Ah, ich sehe, was ich tat, aber ich bin immer noch nicht sicher, wie es zu beheben:

So könnte man so etwas wie eine solche tun. Als ich den Namen der Funktion bekam und eine Regex verwendete, benutzte ich die Methode .groups(). Ich füge den Code dafür im Original hinzu, weil ich ihn in einen String gegossen habe, und er liefert immer noch die gleiche Ausgabe – Justen

+0

Wenn Sie .groups() verwendet haben, versuchen Sie einfach .group() –

+0

das funktioniert hat. Danke vielmals! – Justen

2

Ich erwarte, dass Sie ein Problem mit Ihrem Parsing-Code haben. Die Zeilen wie geschrieben sollten wie erwartet funktionieren.

4

Ich habe Python 3 nicht, also kann ich das nicht testen, aber die Ausgabe von f_name lässt es so aussehen, als wäre es ein Tupel mit einem Element darin. So würden Sie .format(f_name, f_loc) zu .format(f_name[0], f_loc)

EDIT ändern:

Als Antwort auf Ihre bearbeiten, versuchen .group() anstelle von .groups()

1

Da der Schlüssel eine Art von Tupel ist, möchten Sie möglicherweise die verschiedenen Elemente vor dem Drucken verbinden. Wir können nicht wirklich sagen, welche Bedeutung der Schlüssel aus dem gezeigten Ausschnitt hat.

.format(", ".join(f_name), f_loc) 
+0

+1 ein guter Punkt. –