2013-05-08 94 views
0

这里是我的错误,当我打算这样做在我的代码如何添加字典(列表对象)到字典对象在Python

TypeError: unhashable type: 'list' 

这里是我的Python字典列表对象。 在我的代码tea_list_data

[ 
{'bpl_division_id': 1, 'over_kgs': 2, 'worker_id': 1, 'names': 6.0, 'date': '2013-05-08', 'pss': 30.0, 
'bpl_estate_id': 1, 'scrap': 3, 'bpl_company_id': 1, 'output': 15, 'type': 'tea'}, 
{'bpl_division_id': 1, 'over_kgs': 2, 'worker_id': 2, 'names': 6.0, 'date': '2013-05-08', 'pss': 30.0, 
'bpl_estate_id': 1, 'scrap': 3, 'bpl_company_id': 1, 'output': 15, 'type': 'tea'}, 
'bpl_estate_id': 1, 'scrap': 3, 'bpl_company_id': 1, 'output': 15, 'type': 'rubber'} 
] 

,我需要将其更改为这种类型的词典object.because我需要创建OpenERP的记录以及一些条件。下面

显示我需要的输出

{'bpl_division_id': 1, 'over_kgs': 2, 'worker_id': 1, 'names': 6.0, 'date': '2013-05-08', 'pss': 30.0, 
'bpl_estate_id': 1, 'scrap': 3, 'bpl_company_id': 1, 'output': 15, 'type': 'tea'}, 
{'bpl_division_id': 1, 'over_kgs': 2, 'worker_id': 2, 'names': 6.0, 'date': '2013-05-08', 'pss': 30.0, 
'bpl_estate_id': 1, 'scrap': 3, 'bpl_company_id': 1, 'output': 15, 'type': 'tea'}, 
{'bpl_division_id': 1, 'over_kgs': 2, 'worker_id': 3, 'names': 6.0, 'date': '2013-05-08', 'pss': 30.0, 
'bpl_estate_id': 1, 'scrap': 3, 'bpl_company_id': 1, 'output': 15, 'type': 'rubber'}, 
{'bpl_division_id': 1, 'over_kgs': 2, 'worker_id': 4, 'names': 6.0, 'date': '2013-05-08', 'pss': 30.0, 
'bpl_estate_id': 1, 'scrap': 3, 'bpl_company_id': 1, 'output': 15, 'type': 'rubber'} 

请帮我解决这问题。

这里表明我用来创建上述第一个结果

def temp_posting(self, cr, uid, ids, context=None): 
    tea_v = {} 
    tea_list_data = [] 

    if context is None: 
     context = {} 
    bpl_division_id = context['bpl_division_id'] 
    work_update_ids = self.pool.get('bpl.work.update').search(cr, uid, [('bpl_division_id', '=', bpl_division_id)]) 
    work_update_obj = self.pool.get('bpl.work.update').browse(cr, uid, work_update_ids)[0] 
    if work_update_obj: 
     work_update_obj.write({'state': 'negotiation'})   

    for record in work_update_obj.selected_tea_workers_update_line_ids: 
     tea_list_data.append({'bpl_company_id': record.work_id.bpl_company_id.id, 'bpl_estate_id': record.work_id.bpl_estate_id.id, 'bpl_division_id': record.work_id.bpl_division_id.id, 'worker_id': record.worker_id.id, 'date': record.work_id.offered_date, 'type':'tea', 'names': 6.00, 'output':record.tea_total_kgs, 'over_kgs':2, 'scrap':3, 'pss':30.00}) 
    for record in work_update_obj.selected_rubber_workers_update_line_ids: 
     tea_list_data.append({'bpl_company_id': record.work_id.bpl_company_id.id, 'bpl_estate_id': record.work_id.bpl_estate_id.id, 'bpl_division_id': record.work_id.bpl_division_id.id, 'worker_id': record.worker_id.id, 'date': record.work_id.offered_date, 'type':'rubber', 'names': 6.00, 'output':record.rubber_total_kgs, 'over_kgs':2, 'scrap':3, 'pss':30.00})  
    for record in work_update_obj.selected_sundry_workers_update_line_ids: 
     tea_list_data.append({'bpl_company_id': record.work_id.bpl_company_id.id, 'bpl_estate_id': record.work_id.bpl_estate_id.id, 'bpl_division_id': record.work_id.bpl_division_id.id, 'worker_id': record.worker_id.id, 'date': record.work_id.offered_date, 'type':'sundry', 'names':record.sundry_hrs_worked, })  
    for record in work_update_obj.selected_other_workers_update_line_ids: 
     tea_list_data.append({'bpl_company_id': record.work_id.bpl_company_id.id, 'bpl_estate_id': record.work_id.bpl_estate_id.id, 'bpl_division_id': record.work_id.bpl_division_id.id, 'worker_id': record.worker_id.id, 'date': record.work_id.offered_date, }) 
    tea_v = {tea_list_data} 

    daily_transaction_master = self.pool.get('bpl.daily.transaction.master') 
    daily_transaction_master.create(cr, uid, tea_v, context=context) 
    return True 

EDITED * @Arya *请在这里给出你的注意力

for record in work_update_obj.selected_tea_workers_update_line_ids: 
    tea_list_data.append({'bpl_company_id': record.work_id.bpl_company_id.id, 'bpl_estate_id': record.work_id.bpl_estate_id.id, 'bpl_division_id': record.work_id.bpl_division_id.id, 'worker_id': record.worker_id.id, 'date': record.work_id.offered_date, 'type':'tea', 'names': 6.00, 'output':record.tea_total_kgs, 'over_kgs':2, 'scrap':3, 'pss':30.00}) 
tea_v = {tea_list_data} 
+1

该错误表明,您以某种方式将列表分配为字典的关键字,这在python中是不允许的。 – 2013-05-08 09:32:14

+1

作为输出需要的是,逗号分隔的字典值,它不是python中的有效数据结构。 – 2013-05-08 09:38:50

+0

尊敬的Ankit ,, 请指正我纠正它 – 2013-05-08 09:50:44

回答

2

你可以在我的Python代码迭代列表以从列表中获取字典。

试试这个:

for rec in your_list_of_dictionary: 
    print reC#this rec variable contains dictionary 

你可以在每一个创造纪录的for循环,而不是在列表中追加记录。

像这样:

daily_transaction_master = self.pool.get('bpl.daily.transaction.master') 
for record in work_update_obj.selected_tea_workers_update_line_ids: 
    vals = {'bpl_company_id': record.work_id.bpl_company_id.id, 'bpl_estate_id': record.work_id.bpl_estate_id.id, 'bpl_division_id': record.work_id.bpl_division_id.id, 'worker_id': record.worker_id.id, 'date': record.work_id.offered_date, 'type':'tea', 'names': 6.00, 'output':record.tea_total_kgs, 'over_kgs':2, 'scrap':3, 'pss':30.00} 
    daily_transaction_master.create(cr, uid, vals, context=context)` 

你可以做同样的事情在你的每一个循环。

+0

感谢arya.its意味着需要多次使用create方法? – 2013-05-08 10:03:51

+1

是的。那就是我的意思。 – 2013-05-08 10:05:39

+0

感谢其工作良好的艾莉亚。 关于http://stackoverflow.com/questions/16434990/openerp-7-reports-error的任何想法? – 2013-05-08 10:37:12

0

这里是最终编辑的代码,现在它的工作完美。

def temp_posting(self, cr, uid, ids, context=None): 
    tea_v = {} 
    rubber_v = {} 
    sundry_v = {} 
    other_v = {} 

    if context is None: 
     context = {} 
    bpl_division_id = context['bpl_division_id'] 
    work_update_ids = self.pool.get('bpl.work.update').search(cr, uid, [('bpl_division_id', '=', bpl_division_id)]) 
    work_update_obj = self.pool.get('bpl.work.update').browse(cr, uid, work_update_ids)[0] 
    if work_update_obj: 
     work_update_obj.write({'state': 'negotiation'})   

    daily_transaction_master = self.pool.get('bpl.daily.transaction.master') 

    for record in work_update_obj.selected_tea_workers_update_line_ids: 
     tea_v = {'bpl_company_id': record.work_id.bpl_company_id.id, 'bpl_estate_id': record.work_id.bpl_estate_id.id, 'bpl_division_id': record.work_id.bpl_division_id.id, 'worker_id': record.worker_id.id, 'date': record.work_id.offered_date, 'type':'tea', 'names': 6.00, 'output':record.tea_total_kgs, 'over_kgs':2, 'scrap':3, 'pss':30.00} 
     daily_transaction_master.create(cr, uid, tea_v, context=context) 
    for record in work_update_obj.selected_rubber_workers_update_line_ids: 
     rubber_v = {'bpl_company_id': record.work_id.bpl_company_id.id, 'bpl_estate_id': record.work_id.bpl_estate_id.id, 'bpl_division_id': record.work_id.bpl_division_id.id, 'worker_id': record.worker_id.id, 'date': record.work_id.offered_date, 'type':'rubber', 'names': 6.00, 'output':record.rubber_total_kgs, 'over_kgs':2, 'scrap':3, 'pss':30.00}  
     daily_transaction_master.create(cr, uid, rubber_v, context=context) 
    for record in work_update_obj.selected_sundry_workers_update_line_ids: 
     sundry_v = {'bpl_company_id': record.work_id.bpl_company_id.id, 'bpl_estate_id': record.work_id.bpl_estate_id.id, 'bpl_division_id': record.work_id.bpl_division_id.id, 'worker_id': record.worker_id.id, 'date': record.work_id.offered_date, 'type':'sundry', 'names':record.sundry_hrs_worked, }  
     daily_transaction_master.create(cr, uid, sundry_v, context=context) 
    for record in work_update_obj.selected_other_workers_update_line_ids: 
     other_v = {'bpl_company_id': record.work_id.bpl_company_id.id, 'bpl_estate_id': record.work_id.bpl_estate_id.id, 'bpl_division_id': record.work_id.bpl_division_id.id, 'worker_id': record.worker_id.id, 'date': record.work_id.offered_date, } 
     daily_transaction_master.create(cr, uid, other_v, context=context) 
    return True