TypeError:字符串索引必须是整数,而不是Pt []中的str

时间:2015-06-24 23:23:41

标签: python typeerror

为什么会出现此错误?

File Parser.py", line 214, in writeData
comments = subItem['Comments']
TypeError: string indices must be integers, not str

简短的堆栈跟踪:

213:             for subItem in Pt['C']:
214:                comments = subItem['Comments']

代码:

Pt[] is defined as is a list.
Pt = self.createPatient()

def createPatient(self):
    Pt = {
        'S' : {},
        'C' : []
    }
    return Pt

And 'C' is:

这里是'C'(Formats)定义的更大样本。 格式是列表的字典。这有帮助吗?

Formats = {
...
    ['For Future Use', 11, ''],
],
'C' : [
    ['use', 1, ''],
    ['Call', 15, ''],
    ['Leg', 1, '1'],
    ['Rank', 1, 'A'],
    ['DateTime Entered', 14, ''],
    ['User ID', 11, ''],
    ['Comments', 255, ''],
    ['Narrative ID', 11, ''],
    ['For Future Use', 11, ''],
],
'R' : [
    ['Use', 1, ''],
    ['Call #', 15, ''],
    ['Leg', 1, '1'],
....
}

2 个答案:

答案 0 :(得分:2)

C的子元素仍然是列表,需要通过索引访问。 要做你想做的事,最好的方法是用字典替换'C'中的列表。

所以请改用以下内容

var obj = {
  a: 1,
  b: 2,
  c: 3
};
var array = [1, 4, 2, 5, 6];
var ItemsNotInObject = array.slice(); //clone the array

for (var prop in obj) {
  if (array.indexOf(obj[prop]) != -1) {
    for (var i = 0; i < ItemsNotInObject.length; i++) {
      if (ItemsNotInObject[i] == obj[prop]) {
        ItemsNotInObject.splice(i, 1); //now simply remove it because it exists
      }
    }
  }
}

console.log(ItemsNotInObject);

顶部的两行代码将起作用。

答案 1 :(得分:0)

看起来您已在代码中的某个位置将recordName定义为字符串而不是字典。检查

的定义
subItem

我猜它是一个字符串。