将函数应用于python中数组的所有字典元素

问题描述 投票:0回答:1

嗨,我想知道将函数应用于数组的所有元素(这些元素是字典)的最佳方法是什么。我有包含元素的 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 dictionary generator
1个回答
0
投票

我认为可以通过递归函数调用来解决,如下所示的实现。 代码基于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)
© www.soinside.com 2019 - 2024. All rights reserved.