字典键中哪些字符有效?

Tim*_* S. 2 python

我以为我会在这篇文章中找到答案,但它并没有真正列出有效字符是什么。我尝试使用字符串变量作为键,但收到一个键错误:

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)