You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python3.4字典解包语法报错:按多字段分组求和问题

解决Python 3.4中字典合并语法报错的问题

嗨,我来帮你搞定这个问题~

你遇到的语法错误,根源在于你用的{**i[0], **{'qty': sum(...)}}这种字典合并写法是Python 3.5及以上版本才支持的(PEP 448引入的扩展解包语法),而Python 3.4并不兼容这个语法,所以才会抛出SyntaxError。

下面给你两种Python 3.4完全兼容的解决方案,都能实现你要的按[pid][dbid][eid][sid]分组求和qty的需求:

方法一:用字典的copy()+update()(直观易懂)

这种写法逻辑清晰,适合需要高可读性的场景:

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 = []
for group in new_d:
    # 复制分组里第一个字典的所有键值对
    result_item = group[0].copy()
    # 计算当前分组的qty总和并覆盖原qty
    result_item['qty'] = sum(item['qty'] for item in group)
    final_result.append(result_item)

方法二:用dict()构造函数(保持列表推导式风格)

如果你偏好原来的列表推导式写法,可以用Python 3.4支持的dict(原字典, **新键值对)语法:

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 = [dict(group[0], **{'qty': sum(item['qty'] for item in group)}) for group in new_d]

两种方法运行后都会得到你想要的结果:

[
    {'pid': 146, 'dbid': 1, 'eid': 6212, 'qty': 30, 'sid': 6},
    {'pid': 232, 'dbid': 1, 'eid': 6212, 'qty': 2, 'sid': 56},
    {'pid': 146, 'dbid': 1, 'eid': 6212, 'qty': 200, 'sid': 56}
]

内容的提问来源于stack exchange,提问作者Jason TK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:23:26