Python3.4中[*x,*y]语法报错,如何改写兼容代码?
解决Python 3.4兼容的改写方案
这个问题的根源很明确:Python 3.5才正式支持在列表字面量中使用*解包多个可迭代对象(也就是你代码里的[*x, *y]写法),而3.4版本还没有这个语法特性,所以会抛出SyntaxError。
改写后的兼容代码
只需要把列表解包的部分换成列表相加即可,因为x和y本身都是列表,直接相加就能实现完全相同的合并效果:
from operator import itemgetter from collections import defaultdict x = [ {'pid':111, 'sid':6, 'eid':123, 'x_qty':30}, {'pid':222, 'sid':56, 'eid':6212, 'x_qty':2} ] y = [ {'pid':111, 'sid':6, 'eid':123, 'y_qty':123}, {'pid':333, 'sid':56, 'eid':6212, 'y_qty':112} ] data = defaultdict(dict) f = itemgetter('pid', 'sid', 'eid') # 把[*x, *y]替换成x + y,兼容Python3.4 for d in x + y: data[f(d)].update(d) result = list(data.values())
为什么这样改可行?
原代码里的[*x, *y]是把x和y两个列表的所有元素平铺到一个新列表中,而x + y的作用完全一样——它会创建一个新列表,包含x的所有元素,接着是y的所有元素,遍历这个合并后的列表的逻辑和原代码没有任何区别,最终得到的result结果也和原代码一致。
内容的提问来源于stack exchange,提问作者Jason TK
相关产品推荐
相关产品推荐

