Python字典自动将十六进制转换为小数?

时间:2016-07-10 06:20:14

标签: python dictionary hex decimal

我正在研究一个需要从另一个文件中读取字典的Python方法,该文件将代表键和值。

但似乎我遇到的问题是我发送的数字值的表示。例如,我的字典中的某些键看起来像这样:

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

但是我注意到当我尝试遍历字典时,十六进制代替十进制值。即使在字典所在的原始id_dict.py中,数字也会自动从十六进制转换。

这是我尝试迭代它的结果:

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

#Results
val_a 0
val_b 4096

有人可以告诉我为什么值以十进制形式表示而不是以原始存储的十六进制形式表示?提前谢谢!

如果有办法停止自动转换,那么理解这一点也很棒!

2 个答案:

答案 0 :(得分:7)

  

有人可以告诉我为什么这些值以十进制形式表示而不是最初存储在十六进制形式中吗?

它们最初并非以十六进制存储。 Python不会跟踪任何有关base的信息;无论您在源代码中输入0x1000还是4096,它都是相同的数字,而Python会以相同的方式存储它。

当Python打印一个数字时,它必须选择一个基数来显示它,默认值总是十进制。如果要以不同方式打印,则需要指定不同的方式来执行字符串转换,例如hex函数:

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

答案 1 :(得分:2)

Python以相同的方式存储数字,唯一改变的是格式。您的问题是如何格式化数字,而不是表示,因此,您使用字符串格式修复问题:

>>> 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