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
,这样就可以进行额外的索引。请也分享记录的内容
你是对的,但这会在同一行上给我一个“列表索引超出范围”错误。我想我现在明白你想要什么了。更新答案。