在Python中为JSON数组的每个对象添加属性的最优方法
在Python中给JSON数组每个对象添加属性的最佳方法
嘿,这个需求其实有好几种简洁高效的实现方式,我给你整理了几个常用方案,你可以根据自己的场景来选:
1. 原地遍历修改(直接修改原列表)
如果不需要保留原始数据,这个方法最直接高效,不需要额外内存存储新列表:
original_list = [ {"A": 1, "B": "str"}, {"A": 2, "B": "str2"}, {"A": 3, "B": "str3"} ] for item in original_list: item["C"] = "X" # 输出结果就是你要的新列表 print(original_list)
原理:Python里的字典是可变对象,遍历列表时直接给每个字典添加键值对,会直接修改原列表中的元素。
2. 列表推导式生成新列表(保留原数据)
如果需要保留原始列表不被修改,用列表推导式生成全新的列表是最直观的选择(Python 3.5+支持字典解包语法):
original_list = [ {"A": 1, "B": "str"}, {"A": 2, "B": "str2"}, {"A": 3, "B": "str3"} ] new_list = [ {**item, "C": "X"} for item in original_list ] print(new_list)
原理:**item会把原字典的所有键值对解包出来,再加上新的"C": "X",生成一个全新的字典,原列表完全不受影响。
3. 使用map()函数(函数式风格)
如果你喜欢函数式编程的写法,map()配合lambda也能实现,效果和列表推导式类似:
original_list = [ {"A": 1, "B": "str"}, {"A": 2, "B": "str2"}, {"A": 3, "B": "str3"} ] new_list = list(map(lambda x: {**x, "C": "X"}, original_list)) print(new_list)
原理:map()会把列表中的每个字典传入lambda函数,返回添加了新属性的新字典,最后用list()把map对象转换成列表。这个写法更简洁,但可读性比列表推导式稍弱一点。
方案总结
- 优先选原地遍历修改:当不需要保留原数据时,简单高效,内存占用最少;
- 优先选列表推导式:当需要保留原数据时,可读性最强,代码简洁;
map()写法:适合偏好函数式编程风格的场景。
内容的提问来源于stack exchange,提问作者Python
相关产品推荐
相关产品推荐

