双星号错误:语法无效

时间:2018-05-11 18:00:26

标签: python python-3.x

Original Question here

我想根据[pid] [dbid] [eid] [sid]求和[qty]。

此代码适用于v3.6.4但是当我迁移到v3.4时,我收到了一条错误消息:

new_d =  [ [{'pid': 146, 'dbid': 1, 'eid': 6212, 'qty': 10, 'sid': 6}, {'pid': 146, 'dbid': 1, 'eid': 6212, 'qty': 20, 'sid': 6}],
           [{'pid': 232, 'dbid': 1, 'eid': 6212, 'qty': 1, 'sid': 56}, {'pid': 232, 'dbid': 1, 'eid': 6212, 'qty': 1, 'sid': 56}],
           [{'pid': 146, 'dbid': 1, 'eid': 6212, 'qty': 100, 'sid': 56}, {'pid': 146, 'dbid': 1, 'eid': 6212, 'qty': 100, 'sid': 56}]]

final_result = [{**i[0], **{'qty':sum(b['qty'] for b in i)}} for i in new_d]
                  ^
       SyntaxError: invalid syntax

1 个答案:

答案 0 :(得分:5)

**可用于在函数调用中将字典解包为关键字参数。从python 3.5开始,PEP 448 -- Additional Unpacking Generalizations被添加到该语言中。这会扩展您可以解压缩元组(*some_tuple)和字典(**some_dict)的位置。

{**i[0], **{'qty':sum(b['qty'] for b in i)}}

i[0]是列表中的第一个dict{'qty':sum(b['qty'] for b in i)}dict,其中一个键对列表中的'qty'值求和。 **运算符解包两个字典,因为字典构造函数现在支持任意数量的解包,所以这两个字典合并为一个。

这可以通过python 3.4及更早版本的函数来完成

def d_summary(d_list):
    summary = d_list[0].copy()
    summary['qty'] = sum(b['qty'] for b in d_list)
    return summary

final_result = [d_summary(i) for i in new_d]