我正在尝试改变一个数组中对象的结构,我用for循环来循环这个数组。除非我把它追加到一个新数组中,否则这个对象似乎什么也没发生。
我只是忍不住想有更好的办法...
我用占位符数据替换了所有真实的的数据和命名,只是为了结构。
虽然本质上我只是想在original_array
中重构obj
,而不是附加到一个新的obj
。
rebuilt_array = []
for obj in original_array:
rebuilt_obj = {
"inner_obj_1": {
"item_1": obj["old_item_1"],
"item_2": obj["old_item_2"],
"item_3": obj["old_item_3"],
},
"another_item": obj["old_another_item"],
"inner_obj_2": {
"item_1": obj["old_item_1"],
"item_2": obj["old_item_2"],
"item_3": obj["old_item_3"],
},
}
rebuilt_array.append(rebuilt_obj)
1条答案
按热度按时间tkqqtvp11#
当你执行
for obj in original_array
时,obj
是一个局部变量,也是列表中原始对象的副本,所以修改它不会在列表中反映出来,这里有一个方法,你可以做同样的事情,而不用创建一个新的列表并就地更新列表-您还可以进一步修改它,这样我们就不需要创建new_obj,并且您可以通过更新
original_array[i]
dict来直接更新旧对象,就像您使用普通dict一样。例如,original_array[i]['another_item'] = original_array[i].pop("old_another_item")
会将原始对象中的old_another_item
键重命名为another_item
,但与上述方法相比,这可能会变得更脏。下面是它的相应代码-
注意使用
pop()
来重命名dict键,如果您还想在dict中保留原始键,那么可以跳过使用pop()
。