如何在Python 3中实现类似ES6 JavaScript的字典(Dict)展开(Spread)语法?
问题:Python中是否有类似ES6对象展开(Spread)的语法?
我需要在Python中复刻一段ES6 JavaScript的字典展开逻辑,对应的ES6代码如下:
const geo = {'lat': 123, 'lon': 456}; const time = "2021-05-30T13:18:03+00:00" const spreadedObject = {...geo, time: time} console.log(spreadedObject);
输出结果为:{ lat: 123, lon: 456, time: '2021-05-30T13:18:03+00:00' }
请问Python中是否存在类似的Spread展开语法,能够实现上述相同的功能?
回答
当然有!Python从3.5版本开始就支持了类似ES6对象展开的字典解包语法,而且还有几种不同的实现方式,刚好能完美复刻你这段JS代码的逻辑:
1. 最贴近ES6的写法:**字典解包运算符
这是和ES6中...展开语法最对应的写法,直接在创建新字典时解包现有字典的键值对,同时添加新的内容:
geo = {'lat': 123, 'lon': 456} time_str = "2021-05-30T13:18:03+00:00" # 避开内置的time模块命名 spreaded_dict = {**geo, 'time': time_str} print(spreaded_dict)
输出结果和你的JS代码完全一致:
{'lat': 123, 'lon': 456, 'time': '2021-05-30T13:18:03+00:00'}
注意:如果原字典和新添加的键有重复,后面的键值对会覆盖前面的,这和ES6的Spread行为完全一致。
2. 使用字典的copy() + update()方法
如果你需要更明确的分步操作,可以先复制原字典,再用update()方法添加新的键值对:
spreaded_dict = geo.copy() spreaded_dict.update({'time': time_str})
这种方法适合需要对原字典做更多修改的场景,但要注意update()是原地修改字典,所以必须先复制原字典,避免影响原数据。
3. Python 3.9+的合并运算符|
从Python 3.9开始,新增了字典合并运算符|,可以直接合并两个字典,写法更简洁:
spreaded_dict = geo | {'time': time_str}
如果需要原地合并,可以用|=运算符:
geo |= {'time': time_str} # 直接在原geo字典上添加键值对
内容的提问来源于stack exchange,提问作者wzr1337
相关产品推荐
相关产品推荐

