定义字符串python时的键错误

时间:2014-07-04 03:41:56

标签: python string dictionary key

我收到错误“Key error:'name'”

任何人都可以通过以下代码说出问题所在:

import random

def mongoCountry(countryNum, provinceNum):
    """generate some test data"""
    f = open("F:\\univData\\country-mongo.json", mode = 'w')
    text = ""
    for c_n in range(0, countryNum):
        for p_n in range(0, provinceNum):
            text += "{name:country{0},provinces:[{$ref : Province,$id :   province{1}}]}\n".format(c_n, p_n)
    f.write(text)
    f.close()

mongoCountry(2, 10)

我用谷歌搜索了所以我知道这是关于dict()的对象。但我在那里找不到任何这样的东西。

3 个答案:

答案 0 :(得分:1)

str.format将整个字符串视为格式字段,因为它以{name:开头,以}结尾。下面是一个简单字符串的演示:

>>> '{a:{0}}'.format(1)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'a'
>>>

要解决此问题,您可以使用old % formatting

text += "{name:country%i,provinces:[{$ref : Province,$id :   province%i}]}\n" % (c_n, p_n)

答案 1 :(得分:1)

如果我正确理解您的程序,那么您正在尝试创建一个JSON对象。正如iCodez在他的回答中所说,Python的format函数将整个字符串视为格式字符串(或模板字符串,如果您愿意)。要覆盖它,您可以像这样转义格式字符串

"{{name:country{0},provinces:[{{$ref : Province,$id : province{1}}}]}}\n".format(c_n, p_n)

如果c_np_n"Welcome""123"

,您将获得以下内容
{name:countryWelcome,provinces:[{$ref : Province,$id :   province123}]}

答案 2 :(得分:0)

您正在使用{name:开始使用字符串,因此format需要name作为密钥。

请在名字前退出{

https://docs.python.org/2/library/string.html#format-examples