Python新手在这里。我想知道在str.format
中使用字典进行字符串插值时,是否有人可以帮助我KeyError
。
dictionary = {'key1': 'val1', '1': 'val2'}
string1 = 'Interpolating {0[key1]}'.format(dictionary)
print string1
以上工作正常并且产量:
Interpolating val1
但是请执行以下操作:
dictionary = {'key1': 'val1', '1': 'val2'}
string2 = 'Interpolating {0[1]}'.format(dictionary)
print string2
结果:
Traceback (most recent call last):
File "test.py", line 3, in <module>
string2 = 'Interpolating {0[1]}'.format(dictionary)
KeyError: 1L
所以问题似乎在于将数字键解释为列表索引,恕我直言。有什么方法可以解决这个问题吗? (即表示这是一个字典键)
TIA并道歉,如果之前已经问过这个问题(找不到与我的搜索相关的任何内容)。
编辑1:密钥不是数字,因为之前错误地注明了。相反,它是一个数字的字符串表示 - 正如BrenBarn指出的那样。
答案 0 :(得分:12)
没有。根据{{3}}:
因为arg_name不是引号分隔的,所以无法在格式字符串中指定任意字典键(例如,字符串'10'或': - ]'。
因此,您不能在格式字符串中使用由数字组成的字符串作为字典键。
请注意,您的密钥不是数字,并且它不会尝试将其用作列表索引。您的密钥是一个恰好包含数字字符的字符串。它尝试做的是使用数字1(不是字符串“1”)作为字典键。如果您使用数字1作为词典键(即,使您的词典{'key1': 'val1', 1: 'val2'}
),它将起作用。
答案 1 :(得分:5)
我认为你在寻找的是:
dictionary = {'key1': 'val1', '1': 'val2'}
string2 = 'Interpolating {key1}'.format(**dictionary)
print string2
答案 2 :(得分:0)
你是对的 - 解析器并不复杂,也无法处理字典的变量下标。你的工作是:
string2 = 'Interpolating {somevar}'.format(whateverhere..., somevar=dictionary['1'])
答案 3 :(得分:0)
如果您的字典键是字符串,可能的解决方法是将字典转换为类:
class ClassFromDict:
def __init__ (self, dct) :
for key in dct.keys():
self.__dict__[key] = dct[key]
dictionary = {'key1': 'val1', '1': 'val2'}
classfromdict = ClassFromDict(dictionary)
string1 = 'Interpolating {0.key1}'.format(classfromdict)
print string1
string2 = 'Interpolating {0.1}'.format(classfromdict)
print string2