python - 双星号错误: Invalid Syntax

标签 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

最佳答案

** 可用于将字典解包到函数调用中的关键字参数中。从 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]

关于python - 双星号错误: Invalid Syntax,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50297859/

相关文章:

python-3.x - np.where的不同类型的结果。x,y在两个条件下互换。我想念什么?

python - PyPDF2 : writing output to stdout fails with python3

python - 将 pandas 数据帧的一行转换为多行

python - 为什么我的 Python 函数不返回结果?

python - 如何访问通过 Django 表单上传的媒体文件?

python-3.x - Pyglet hello world 示例在按下键之前不显示标签

python - 需要处理具有非唯一多索引的串联数据帧

python - Pandas 数据框/Python : How to update dataframe cell value using for loop at each iteration in python?

python - Django 分页基于 View 中的 bool 值

python - 在python中生成渐变颜色