我正从数据库中检索记录集 然后使用 for 语句,我正在尝试构建我的数据以匹配第三方API。
但是我得到了这个错误并且无法理解:
“errorType”:“TypeError”,“errorMessage”:“列表索引必须是 整数,而不是str “消息[ '英语'] [ 'merge_vars'] [ '瓦尔']。追加({”
以下是我的代码:
XDocument xmlDocument = XDocument.Load(filename);
var data = (from item in xmlDocument.Descendants()
select new
{
Customers = (from customers in item.Descendants("Customer")
select new Customer
{
Name = customers.Element("Name").Value,
Address = customers.Element("Address").Value
}).ToList(),
Manufacturers = (from manufacturers in item.Descendants("Manufacturer")
select new Manufacturer
{
Name = manufacturers.Element("Name").Value,
Phone = manufacturers.Element("Phone").Value
}).ToList()
}).SingleOrDefault();
目标是得到以下内容:
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
答案 0 :(得分:2)
此代码似乎表明optionalDependencies
是一个列表,因为您将其初始化为:
messages['english']['merge_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,
})
循环是不必要的。
答案 1 :(得分:0)
错误的含义是你试图在字符串而非索引(int)的帮助下访问数组元素。
我相信你的错误在于这一行:
messages['english']['merge_vars']['vars'].append({..})
您将merge_vars
声明为数组:
'merge_vars': []
所以,要么像这样dict
:
'merge_vars': {}
或者,将其用作数组:
messages['english']['merge_vars'].append({..})
希望有所帮助
答案 2 :(得分:0)
正如错误消息所说,您的问题出在此处:messages['english']['merge_vars']['vars'].append({'name': key,'content': value})
项目messages['english']['merge_vars']
是list
,因此当您执行list[i]
之类的操作时,您尝试访问元素,而i
不能是字符串,因为'vars'
的情况。您可能需要删除['vars']
部分或将messages['english']['merge_vars']
设置为dict
,以便进行其他索引。