我以为我会在这篇文章中找到答案,但它并没有真正列出有效字符是什么。我尝试使用字符串变量作为键,但收到一个键错误:
Traceback (most recent call last):
File "./validate.py", line 18, in <module>
mylist = read_from_files(mydir)
File "/home/username/utils.py", line 190, in function_name
mydict[jobname]['jobname'] = jobname <--- This is the offending line
KeyError: 'APPLEND.ABCDEF123_'
Run Code Online (Sandbox Code Playgroud)
我认为句点或下划线是问题所在,但由于这是一个字符串,因此字符串值是什么不应该不重要吗?
字典键中可以使用哪些有效字符?(或者我离基地太远了,它因为其他原因而崩溃了?)
我有一个相对复杂的数据结构,一个包含字典列表的字典列表,但到目前为止我还没有遇到任何问题,但我也没有尝试为我的字典键使用变量。
即使来自 devleoper.com 的此链接也重申您可以使用任何不可变对象作为键。字符串是不可变的...
源代码:(来自read_from_files函数)
with open(file, "r") as fhFile:
mydict['rawcode'] = fhFile.read()
# cleaning up the - separators
mydict['rawcode'] = mydict['rawcode'].replace('-\n','') # This works just fine
mydict['linelist'] = mydict['rawcode'].split("\n") # This works just fine
mydict['joblist'] = []
newJob = False
for eachline in mydict['linelist']:
print(str(eachline))
# Identify job names
if "_JOB" in eachline:
newJob = True # We're in the same job until newJob = False, then start over
jobname = eachline.split()[1].split("%")[0] # This part also works just fine
mydict['joblist'].append(jobname) # Also works just fine
mydict[jobname]['jobname'] = jobname # Throwing KeyError
Run Code Online (Sandbox Code Playgroud)
谢谢你的时间!
小智 5
在该行中mydict[jobname]['jobname'] = jobname,字典mydict[jobname]尚未定义,因此您必须先定义它:
mydict[jobname] = {}
mydict[jobname]['jobname'] = jobname
Run Code Online (Sandbox Code Playgroud)