为什么008和009是无效的Python字典键?

13 投票
5 回答
1191 浏览
提问于 2025-04-15 12:14

为什么我不能把008或009作为Python字典的键,而001到007都可以呢?举个例子:

some_dict = {
    001: "spam",
    002: "eggs",
    003: "foo",
    004: "bar",
    008: "anything", # Throws a SyntaxError
    009: "nothing"   # Throws a SyntaxError
    }

更新: 问题解决了。我之前不知道以零开头的数字会被当作八进制数。这听起来真的很奇怪。为什么是零呢?

5 个回答

8

在Python(还有很多其他编程语言)中,数字前面加个0,就表示这是一个八进制数(基数是8)。这种用法叫做八进制字面量。八进制数的数字顺序是0, 1, 2, 3, 4, 5, 6, 7,然后是10, 11,依此类推。所以08(在八进制中)是无效的

如果你去掉前面的零,你的代码就没问题了:

some_dict = 
{ 
    1: "spam",
    2: "eggs",
    3: "foo",
    4: "bar",
    8: "anything",
    9: "nothing" 
}
10

在Python中,008和009被当作八进制数字来处理,所以它们是无效的。

八进制数字只能到007,接下来的数字是010(代表十进制的8),然后是011(代表十进制的9)。你可以在Python的解释器里试试看,你就明白我说的意思了。

28

在Python和一些其他编程语言中,如果你把一个数字前面加上0,这个数字就会被当作八进制(基数为8)来理解。在八进制中,只有0到7这些数字是有效的。所以,你需要把你的代码改成这样:

some_dict = { 
    1: "spam",
    2: "eggs",
    3: "foo",
    4: "bar",
    8: "anything",
    9: "nothing" }

如果前面的零真的很重要,那就用字符串来作为键。

撰写回答