你好,我想知道什么是最好的方法来应用一个函数的所有元素的数组(这些元素是字典)。我有一个包含元素的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']]
然后有人告诉我,我也可以使用generator,因为他告诉我,在处理大数据时,它对内存更好。问题是他没告诉我怎么做所以我尝试了我的方式:
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)
但是我不确定我必须退货吗?卖出收益表?因为我现在找不到一种方法来访问生成器的结果,而且看起来我的代码除了“初始化”生成器对象之外没有做任何事情。
如何正确处理我的问题?
2条答案
按热度按时间hgqdbh6s1#
我认为它可以通过递归函数调用来解决,如下面的实现。代码基于Python 3。
zujrkrfu2#
你说对了:
首先检查你的函数返回了什么。你需要一个
return
关键字来从你的函数中返回一些东西。像一旦你正确理解了你的函数,你就可以跳到生成器。
如果您想一次性查看完整的生成器,您可以:
想看单个元素: