无法将数据附加到数组

时间:2016-08-26 15:40:31

标签: python python-2.7

我正从数据库中检索记录集 然后使用 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

3 个答案:

答案 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,以便进行其他索引。