Python 无法将数据附加到数组

Python 无法将数据附加到数组,python,python-2.7,Python,Python 2.7,我正在从数据库检索记录集。 然后使用for语句,我试图构造与第三方API匹配的数据 但我发现了这个错误,无法理解: “errorType”:“TypeError”,“errorMessage”:“列表索引必须为” 整数,而不是str“ “邮件['english']['merge_vars']['vars'].追加({” 下面是我的代码: cursor = connect_to_database() records = get_records(cursor) template = dict()

我正在从数据库检索记录集。
然后使用for语句,我试图构造与第三方API匹配的数据

但我发现了这个错误,无法理解:

“errorType”:“TypeError”,“errorMessage”:“列表索引必须为” 整数,而不是str“
“邮件['english']['merge_vars']['vars'].追加({”

下面是我的代码:

cursor = connect_to_database()

records = get_records(cursor)

template = dict()

messages = dict()

template['english'] = "SOME_TEMPLATE reminder-to-user-english"

messages['english'] = {
    'subject': "Reminder (#*|code|*)",
    'from_email': 'mail@mail.com',
    'from_name': 'Notifier',
    'to': [],
    'merge_vars': [],
    'track_opens': True,
    'track_clicks': True,
    'important': True
}

for record in records:

    record = dict(record)

    if record['lang'] == 'english':

        messages['english']['to'].append({
            'email': record['email'],
            'type': 'to'
        })

        messages['english']['merge_vars'].append({
            'rcpt': record['email']
        })

        for (key, value) in record.iteritems():

            messages['english']['merge_vars']['vars'].append({
                'name': key,
                'content': value
            })

    else:

        template['other'] = "SOME_TEMPLATE reminder-to-user-other"

close_database_connection()

return messages
目标是获得如下内容:

messages = {
 'subject': "...",
 'from_email': "...",
 'from_name': "...",
 'to': [
   {
     'email': '...',
     'type': 'to',
   },
   {
     'email': '...',
     'type': 'to',
   }
 ],
 'merge_vars': [
  {
    'rcpt': '...',
    'vars': [
      {
       'content': '...',
       'name': '...'
      },
      {
       'content': '...',
       'name': '...'
      }
    ]
  },
  {
    'rcpt': '...',
    'vars': [
      {
       'content': '...',
       'name': '...'
      },
      {
       'content': '...',
       'name': '...'
      }
    ]
  }
 ]
}

错误的意思是,您试图通过字符串而不是索引(int)来访问数组元素

我相信你的错误在这一行:

messages['english']['merge_vars']['vars'].append({..})
您将
merge\u vars
声明为数组,如下所示:

'merge_vars': []
因此,您可以将其设置为如下所示:

'merge_vars': {}
或者,将其用作数组:

messages['english']['merge_vars'].append({..})

希望有帮助

此代码似乎表明
消息['english']['merge\u vars']
是一个列表,因为您将其初始化为:

messages['english'] = {
    ...
    'merge_vars': [],
    ...
}
并在其上调用
append

messages['english']['merge_vars'].append({
    'rcpt': record['email']
})
但是,稍后,您在调用时将其视为字典:

messages['english']['merge_vars']['vars']
你想要的似乎更像:

vars = [{'name': key, 'content': value} for key, value in record.iteritems()]
messages['english']['merge_vars'].append({
    'rcpt': record['email'],
    'vars': vars,
})

然后,就不需要
for
循环了。

正如错误消息所说,您的问题在这里:
消息['english']['merge_vars']['vars'].append({'name':key,'content':value})


messages['english']['merge_vars']
项是一个
列表
,因此当您执行类似
list[i]
i
的操作时,您试图访问元素,而
i
项不能是字符串,就像
'vars'
项一样。您可能需要删除
['vars'
部分或设置
消息['english']['merge_vars']
成为一个
dict
,这样就可以进行额外的索引。

请也分享
记录的内容
你是对的,但这会在同一行上给我一个“列表索引超出范围”错误。我想我现在明白你想要什么了。更新答案。