使用 lambda 转换字典列表中的值

Transform values in a list of dictionaries using lambda

我有一个字典列表,像这样:

matrices = [
    { "name": 'dark_matter_and_gas', 'matrix': dark_matter_a_matrix},
    { "name": 'dark_matter_and_gas', 'matrix': dark_matter_b_matrix},
    { "name": 'dark_matter_and_gas', 'matrix': dark_matter_c_matrix},
    { "name": 'dark_matter_and_gas', 'matrix': dark_matter_d_matrix},
    { "name": 'dark_matter_and_gas', 'matrix': dark_matter_e_matrix},
]

其中每个 'matrix' 值都是一个 pandas 矩阵对象,并且 dark_matter_a_matrix.dtypes,例如,对于每个矩阵,returns 一系列浮点数。


现在我想在一行中对字典中的所有矩阵进行一些转换。

转换会立即将一些 function(matrix) 应用于所有字典值。

在 pandas 中,我会在 DataFrame 中使用 apply()lambda,如下所示:

new_matrices = matrices['matrix'].apply(lambda x: function(x))

这个到字典的最好方法是什么?我必须保持字典结构相同。

您可以遍历 matrices 中的字典并将 function 应用于每个字典中的每个 DataFrame:

for d in matrices:
    d['matrix'] = d['matrix'].apply(lambda x: function(x))

我猜你也可以把它写成列表推导式:

matrices = [{'name': 'dark_matter_and_gas', 'matrix': d['matrix'].apply(lambda x: function(x))} for d in matrices]

但在这种情况下效率要低得多,因为您可以在循环中修改每个字典而无需创建新列表。