【发布时间】:2016-12-05 19:16:19
【问题描述】:
我对 Python 还很陌生,我想做的是以下几点:
- 读取文件
- 将元素添加到字典中的每一行
- 如果键已经存在,则将它们的键值放入列表中,并将新值附加到列表中。
- 用新的值列表更新字典
这是我的代码:
jobChangeMap=dict() # Maps the changed job name. Format will be jobset,originaljob,jobNumber:jobset,changedjob,jobnumber
jobValues = []
if(not jobsetName in jobsetJobMap.keys()):
logger.debug("{0} not found as a key. Adding key and value pair".format(jobsetName))
jobsetJobMap.update({jobsetName:jobName+","+jobNumber})
logger.debug(jobsetJobMap)
else:
jobValues = []
jobValues[:]=[]
logger.debug("{0} already found as a key. Getting list of values for key".format(jobsetName))
jobValues=jobsetJobMap[jobsetName]
logger.debug("Number of values for {0} is {1}".format(jobsetName,jobValues.count))
logger.debug(jobsetJobMap)
if(not jobName in jobValues):
myJobName=jobName+","+jobNumber
logger.debug("Size before adding: {0}".format(len(jobValues)))
jobValues.append(myJobName)
这是引发以下错误的行:
File "D:\Git-Python\MountSophie-Conversion\jmoConversion\JMOExtract.py", line 163, in createJobMap
jobValues.append(myJobName)
AttributeError: 'str' object has no attribute 'append'
为什么 Python 抱怨 jobValues 是一个 str 对象,即使我将它明确定义为类型列表?
【问题讨论】:
-
随后你有
jobValues=jobsetJobMap[jobsetName],所以之前的jobValues = []是无关紧要的。 -
您已通过此语句将
jobValues的类型更改为str-jobValues=jobsetJobMap[jobsetName]。 -
@khelwood - 我需要将值放入列表中。我认为这是获取键值列表的代码。不是这样吗?
-
jobValues.append(jobsetJobMap[jobsetName])会将字符串添加到您现有的列表中。jobValues = [jobsetJobMap[jobsetName]]将创建一个新列表并包含字符串并将其分配给您的变量。jobValues=jobsetJobMap[jobsetName]将用=(字符串)右侧的内容替换当前变量(列表)中的任何内容。 -
@JohnSquarry 请不要通过回滚我们的改进来破坏您的问题。