2016-12-24 2 views
0

Im folgenden Code:Wie defaultdict Variable ohne seinen Typ drucken?

from collections import defaultdict 

confusion_proba_dict = defaultdict(float) 

for i in xrange(10): 
    confusion_proba_dict[i] = i + 10 

print confusion_proba_dict 

Ausgang ist:

defaultdict(<type 'float'>, {0: 10, 1: 11, 2: 12, 3: 13, 4: 14, 5: 15, 6: 16, 7: 17, 8: 18, 9: 19}) 

Aber ich Ausgang sein müssen:

{0: 10, 1: 11, 2: 12, 3: 13, 4: 14, 5: 15, 6: 16, 7: 17, 8: 18, 9: 19} 

Wie kann ich es tun?

+5

Warum brauchen Sie die Ausgabe? Sie könnten einfach 'dict' auf Ihrem defaultdict-Ergebnis' confusion_proba_dict' aufrufen, um zu bekommen, was Sie wollen: 'dict (confusion_proba_dict)'. Aber ich denke immer noch, dass das übertrieben und nicht notwendig ist. – idjaw

+1

Sie profitieren nicht von der 'defaultdict' Klasse in Ihrem Code. In der Tat werden die Werte in 'confusion_proba_dict' nach der Ausführung der 'for'-Schleife zu Integer-Werten, da die 'float'-Factory-Funktion niemals aufgerufen wird. Erstellen Sie einfach ein normales Wörterbuch mit 'confusion_proba_dict = {i: float (i) + 10 für i in Bereich (10)}'. Das Ergebnis ist {0: 10.0, 1: 11.0, 2: 12.0, 3: 13.0, 4: 14.0, 5: 15.0, 6: 16.0, 7: 17.0, 8: 18.0, 9: 19.0} und es wird Machen Sie das ganze Problem über das Drucken 'defaultdict' verschwinden. – martineau

+1

@martineau Wenn du es so machst, brauchst du nicht den expliziten Aufruf von float, '{i: i + 10.0 für i in range (10)}' arbeite mit der impliziten Typkonvertierung – Copperfield

Antwort

1

verwandeln es nur zu einem regelmäßigen dict

print(dict(confusion_proba_dict)) 

aber wenn du gehst, so zu verwenden, nur eine regelmäßige dict verwenden, wie Sie eine der Vorteile von defaultdict nicht verwenden

+1

Eigentlich ist es nicht notwendig, zuerst die' defaultdict' -Instanz in ein 'dict' zu konvertieren. Rufen Sie stattdessen einfach die Methode der Basisklasse 'dict' auf, um die Zeichenfolgendarstellung zu erhalten, aber übergeben Sie ihr die abgeleitete Klasseninstanz als ihr' self' Argument. d.h. 'print (dict. __ repr __ (confusion_proba_dict))'. Die Konvertierung zu vermeiden wird etwas effizienter sein, mehr offensichtlich für größere Wörterbücher. Dies ist im Wesentlichen was @idjaw vorgeschlagen hat. – martineau

+0

@martineau das ist interessant, aber irgendwie hacky. Über den anderen Punkt, das gleiche kann man über Waxrat sagen, der Unterschied ist, dass ich ausdrücklich vorschlage, stattdessen ein normales Diktat zu verwenden, daher war meine Antwort die akzeptierte, glaube ich ... – Copperfield

+0

Copperfield: Wenn dich die Hackerei stört, der Die gleiche Sache kann formaler durchgeführt werden, indem eine Unterklasse von "defaultdict" abgeleitet wird, deren "__repr __()" - Methode im Wesentlichen die gleiche Sache war. Dieser Ansatz würde natürlich ein paar zusätzliche Codezeilen erfordern, aber so oder so würde man den Aufwand vermeiden, die Instanz vorübergehend in ein normales Wörterbuch umzuwandeln. – martineau

1
print dict(confusion_proba_dict) 
+1

Hinweis für Python 3 Benutzer, die auf diese Frage stoßen könnten und sich die Antwort ansehen. Sie müssen mit Klammern umbrechen: 'print (dict (confusion_proba_dict))', da 'print' keine Aussage mehr in Python 3 ist. – idjaw

Verwandte Themen