为什么我不能将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
}
更新:问题已解决。我不知道启动一个零的文字使它成为八进制。这看起来很奇怪。为什么零?
答案 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
开始一个数字时,它被解释为八进制数。由于008
和009
不是八进制数,因此失败。
0
位于八进制数之前,因此您无需编写(127)₈
。从Wikipedia page:“有时,八进制数字由前面带有0的值表示(例如,在Python 2.x或JavaScript 1.x中 - 尽管现在两者都已弃用)。”