嗨,我想知道将函数应用于数组的所有元素(这些元素是字典)的最佳方法是什么。我有包含元素的 dict 对象,其中一个是另一个 dict 数组。 我想避免做以下事情
my_array = api.get_elements().json() # return an array of dict
for elem in my_array:
for sub_elem in elem['sub_array']: # here I access the the sub array
process(sub_elem)
process 将是一个函数,我可以在其中修改 sub_elem 的一些值。 从我到目前为止读到的内容来看,我可以使用 map() 函数,例如
map_res = map(process, elem['sub_array'])
或者我可以使用列表理解
res = [process(sub_elem) for sub_elem in elem['sub_array']]
然后有人告诉我我也可以使用生成器,因为他告诉我在处理大数据时这对内存更好。问题是他没有告诉我怎么做。所以我尝试了自己的方法:
processed_data_generator = (process(d) for d in elem['sub_array'])
def process(elem: dict):
elem['name'] = 'NAME'
for processed_dict in processed_data_generator:
print(processed_dict)
但我不确定是否必须退货?放置产量声明?因为我现在找不到访问生成器结果的方法,而且似乎我的代码除了“初始化”生成器对象之外没有做任何事情。
处理我的问题的正确方法是什么?
我认为可以通过递归函数调用来解决,如下所示的实现。 代码基于Python 3。
import collections.abc
def map_nested_dicts_modify(ob, func):
for k, v in ob.items():
if isinstance(v, collections.abc.Mapping):
map_nested_dicts_modify(v, func)
else:
func(v)
map_nested_dicts_modify(my_array, process)