当前位置: 首页 > 面试题库 >

字典更新序列元素#0的长度为3;2个为必填项

滑弘扬
2023-03-14
问题内容

我想account.bank.statement.line通过其他对象将线添加到对象,但是出现以下错误:

“字典更新序列元素#0的长度为3;必须为2”

这是我的代码:

def action_account_line_create(self, cr, uid, ids):
    res = False
    cash_id = self.pool.get('account.bank.statement.line')
    for exp in self.browse(cr, uid, ids):
        company_id = exp.company_id.id
        #statement_id = exp.statement_id.id
        lines = []
        for l in exp.line_ids:
            lines.append((0, 0, {
                'name': l.name,
                'date': l.date,
                'amount': l.amount,
                'type': l.type,
                'statement_id': exp.statement_id.id,
                'account_id': l.account_id.id,
                'account_analytic_id': l.analytic_account_id.id,
                'ref': l.ref,
                'note': l.note,
                'company_id': l.company_id.id
            }))

        inv_id = cash_id.create(cr, uid, lines,context=None)
        res = inv_id
    return res

我对此进行了更改,但随后遇到此错误:

  File "C:\Program Files (x86)\OpenERP 6.1-20121029-003136\Server\server\.\openerp\workflow\wkf_expr.py", line 68, in execute
  File "C:\Program Files (x86)\OpenERP 6.1-20121029-003136\Server\server\.\openerp\workflow\wkf_expr.py", line 58, in _eval_expr
  File "C:\Program Files (x86)\OpenERP 6.1-20121029-003136\Server\server\.\openerp\tools\safe_eval.py", line 241, in safe_eval
  File "C:\Program Files (x86)\OpenERP 6.1-20121029-003136\Server\server\.\openerp\tools\safe_eval.py", line 108, in test_expr
  File "<string>", line 0   
   ^
SyntaxError: unexpected EOF while parsing

码:

def action_account_line_create(self, cr, uid, ids, context=None):
    res = False
    cash_id = self.pool.get('account.bank.statement.line')
    for exp in self.browse(cr, uid, ids):
        company_id = exp.company_id.id
        lines = []
        for l in exp.line_ids:
            res = cash_id.create ( cr, uid, {
                'name': l.name,
                'date': l.date,
                'amount': l.amount,
                'type': l.type,
                'statement_id': exp.statement_id.id,
                'account_id': l.account_id.id,
                'account_analytic_id': l.analytic_account_id.id,
                'ref': l.ref,
                'note': l.note,
                'company_id': l.company_id.id
            }, context=None)
    return res

问题答案:

出现此错误的原因是,您尝试dict使用错误的序列(listtuple)结构来更新对象。

cash_id.create(cr, uid, lines,context=None)试图转换lines成字典对象:

(0, 0, {
    'name': l.name,
    'date': l.date,
    'amount': l.amount,
    'type': l.type,
    'statement_id': exp.statement_id.id,
    'account_id': l.account_id.id,
    'account_analytic_id': l.analytic_account_id.id,
    'ref': l.ref,
    'note': l.note,
    'company_id': l.company_id.id
})

从该元组中删除第二个零,以将其正确转换为dict对象。

要测试自己,请在python shell中尝试一下:

>>> l=[(0,0,{'h':88})]
>>> a={}
>>> a.update(l)

Traceback (most recent call last):
  File "<pyshell#11>", line 1, in <module>
    a.update(l)
ValueError: dictionary update sequence element #0 has length 3; 2 is required

>>> l=[(0,{'h':88})]
>>> a.update(l)


 类似资料:
  • 问题内容: 我在django 1.4上收到一条错误消息: 字典更新序列元素#0的长度为1;2个为必填项 [编辑] 当我尝试使用模板标签时发生了这种情况:: 当我尝试访问hstore queryset时,也会发生这种情况: [编辑] 代码是: 我只是在尝试获取价值。我不了解“更新顺序”消息。当我使用游标而不是hstore queryset时,该函数有效。错误也来自模板渲染。我刚刚重新启动uwsgi,

  • 我有一个包含字典作为元素的单列的。这是以下代码的结果: 我需要将此列拆分为尽可能多的列(我有太多的行和列,并且我无法更改函数),因此输出将是一个包含列,,的数据帧,<代码>功能50。这样做的最佳方式是什么? 一个具体而简单的例子: 但当我尝试用pd.Series或pd.DataFrame包装它时,它说如果数据是标量值,则必须提供索引。提供索引=['feature1','feature2'],我会得

  • 本文向大家介绍python 将列表里的字典元素合并为一个字典实例,包括了python 将列表里的字典元素合并为一个字典实例的使用技巧和注意事项,需要的朋友参考一下 我就废话不多说了,大家还是直接看代码吧~ 返回结果: {'aa': 'aa', 'cc': 'cc', 'dd': 'dd', 'bb': 'bb'} 补充知识:python操作excel,将每行信息放在字典里,所有信息放在一个列表里

  • 问题内容: Python中是否有一种方法可以序列化使用元组作为键的字典: 只需使用json.dumps(a),就会产生: 问题答案: 您不能将其序列化为json,json对于什么算作dict键要比python灵活得多。 您可以将映射转换为键,值对的序列,如下所示:

  • 问题内容: 我有一本字典 我想将其转换为包含字典键的列表。每个密钥应重复与其关联值相同的次数。 我写了这段代码来完成这项工作: 输出: 但是我希望它能成为列表理解者。如何才能做到这一点? 问题答案: 您可以使用列表理解来做到这一点: 产量: 您可以再次对其进行排序以获得所需的列表。

  • 问题内容: 我发现有很多线程可以按这里的值进行排序,但是它似乎对我不起作用… 我有一个包含元组的列表字典。每个列表都有不同数量的元组。我想按每个列表包含多少个元组对字典进行排序。 这可能吗? 问题答案: d = {“one”: [(1,3),(1,4)], “two”: [(1,2),(1,2),(1,3)], “three”: [(1,1)]} >>> for k in sorted(d, ke