为什么008和009的Python dicts无效键?

时间:2009-06-14 02:12:21

标签: python dictionary python-2.x

为什么我不能将008或009作为Python dict的键,但是001-007很好? 例如:

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

更新:问题已解决。我不知道启动一个零的文字使它成为八进制。这看起来很奇怪。为什么零?

5 个答案:

答案 0 :(得分:28)

在python和其他一些语言中,如果以0开始一个数字,则该数字被解释为八进制(基数为8),其中只有0-7是有效数字。您必须将代码更改为:

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

或者如果前导零非常重要,请使用字符串作为键。

答案 1 :(得分:10)

Python将008和009视为八进制数,因此......无效。

你最多只能到007,然后下一个数字是010(8)然后是011(9)。在Python解释器中试一试,你会明白我的意思。

答案 2 :(得分: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" 
}

答案 3 :(得分:7)

@ DoxaLogos是对的。并不是说它们是无效的密钥 - 它们是无效的文字。如果你试图在任何其他环境中使用它们,你会得到同样的错误。

答案 4 :(得分:2)

这是因为,当您使用0开始一个数字时,它被解释为八进制数。由于008009不是八进制数,因此失败。

0位于八进制数之前,因此您无需编写(127)₈。从Wikipedia page“有时,八进制数字由前面带有0的值表示(例如,在Python 2.x或JavaScript 1.x中 - 尽管现在两者都已弃用)。”