2016-07-10 6 views
2

Ich arbeite an einer kleinen Python-Methode, die ein Wörterbuch aus einer anderen Datei lesen muss, die den Schlüssel und Werte darstellt.Python-Wörterbuch wandelt Hexadezimalzahlen automatisch in Dezimalzahlen um?

Aber es scheint, dass ich ein Problem mit der Darstellung der Zahlenwerte, die ich über sende, habe. Zum Beispiel würde einige Schlüssel in meinem Wörterbuch wie folgt aussehen:

id_dict = { 
    'val_a': 0x0000, 
    'val_b': 0x1000 
} 

Aber ich merkte, dass, wenn ich durch das Wörterbuch zu wiederholen versuchen, die hexadezimale mit dem Dezimalwert ersetzt wird. Selbst im Original id_dict.py, wo sich das Wörterbuch befindet, werden die Zahlen automatisch von hex konvertiert.

Das ist mein Ergebnis zu versuchen, durch sie durchlaufen:

for k,v in id_dict.items(): 
    print(k,v) 

#Results 
val_a 0 
val_b 4096 

Kann mir jemand sagen, warum die Werte in dezimaler Form dargestellt werden und nicht in der hexadezimalen Form, dass sie ursprünglich gespeichert sind in? Danke im Voraus!

Und wenn es eine Möglichkeit gibt, die automatische Konvertierung zu stoppen, wäre das auch gut zu verstehen!

Antwort

7

Kann mir jemand sagen, warum die Werte in Dezimalform und nicht in der hexadezimalen Form, in der sie ursprünglich gespeichert sind, dargestellt werden?

Sie wurden ursprünglich nicht in Hexadezimal gespeichert. Python verfolgt keine Informationen über die Basis; ob Sie in Ihrem Quellcode 0x1000 oder 4096 eingeben, es ist die gleiche Nummer, und Python speichert es auf die gleiche Weise.

Wenn Python eine Zahl ausgibt, muss es eine Basis auswählen, in der es angezeigt wird, und der Standardwert ist immer dezimal. Wenn Sie es anders ausdrucken möchten, müssen Sie eine andere Art und Weise angeben String-Konvertierung, wie die hex Funktion auszuführen:

>>> print 0x1000 
4096 
>>> print hex(0x1000) 
0x1000 
+1

Und wenn Sie immer sicherstellen möchten, dass führende Nullen angezeigt werden, verwenden Sie [Format-String-Syntax] (http://docs.python.org/3/library/string.html#formatstrings): 'print (" {: 04x} ". format (1)') –

+0

Ah! sehr cool. Danke für diese Information! –

2

Python speichert die Zahlen die gleiche Art und Weise, das einzige, was sich ändert, ist die Formatierung . Ihr Problem ist, wie die Zahlen formatiert werden, nicht dargestellt, damit Sie Ihr Problem beheben mit String-Formatierung:

>>> d = {k:v for k,v in zip('abcdefg',range(1,5000,313))} 
>>> d 
{'e': 1253, 'g': 1879, 'a': 1, 'd': 940, 'c': 627, 'b': 314, 'f': 1566} 
>>> for k,v in d.items(): 
... print("{} {:#06x}".format(k,v)) 
... 
e 0x04e5 
g 0x0757 
a 0x0001 
d 0x03ac 
c 0x0273 
b 0x013a 
f 0x061e 
Verwandte Themen