一、List根據對象屬性分組再合併
def group_merge_list(lst, key_func, merge_func): """ 對list根據對象屬性分組再合併 :param lst: 目標列表 :param key_func: 分組關鍵字函數 :param merge_func: 合併函數 :return: 合併後的結果 """ groups = {} for item in lst: key = key_func(item) if key not in groups: groups[key] = [] groups[key].append(item) result = [] for key, group in groups.items(): merged_item = merge_func(group) result.append(merged_item) return result
對於一個列表,我們可以根據其中的對象屬性進行分組。分組後,我們很可能需要將每個分組內的對象合併成一個新的對象。這時,我們可以使用group_merge_list函數。該函數接受三個參數:目標列表lst、分組關鍵字函數key_func和合併函數merge_func。key_func用於根據對象的屬性獲取其分組關鍵字,merge_func用於合併每個分組內所有對象。最終,函數返回一個合併後的結果。
二、List根據對象屬性分組多個list
from itertools import chain, groupby def group_lists(lst_of_lsts, key_func): """ 對多個list根據對象屬性分組 :param lst_of_lsts: 多個列表 :param key_func: 分組關鍵字函數 :return: 分組後的結果 """ lst = list(chain(*lst_of_lsts)) lst = sorted(lst, key=key_func) return {k: list(g) for k, g in groupby(lst, key=key_func)}
如果我們有多個列表,每個列表都包含一些對象,我們可以想像將它們全部合併成一個更大的列表,然後再根據對象屬性進行分組。但這種方式不太好,因為它可能會浪費很多內存。相反,我們可以使用group_lists函數來對多個列表根據對象屬性進行分組。該函數接受兩個參數:多個列表lst_of_lsts和分組關鍵字函數key_func。在函數內部,我們使用了itertools中的chain函數將多個列錶轉換成一個大列表,然後使用groupby函數根據對象的屬性進行分組。最終,函數返回一個字典,其中包含所有的分組。
三、List根據某個屬性分組
def group_list(lst, key): """ 對list根據某個屬性分組 :param lst: 目標列表 :param key: 屬性名 :return: 分組後的結果 """ groups = {} for item in lst: if key in item: k = item[key] else: k = None if k not in groups: groups[k] = [] groups[k].append(item) return groups
如果我們只需要根據某個輕便進行分組,我們可以使用group_list。這個函數接受兩個參數:目標列表lst和屬性名key。函數內部首先根據key進行分組,然後將所有分組存儲在字典中。最終,函數將字典作為結果返回。
四、List根據對象屬性取最大值
def group_list_max(lst, key): """ 對list根據對象屬性取最大值 :param lst: 目標列表 :param key: 屬性名 :return: 滿足條件的對象列表 """ max_value = None result = [] for item in lst: if key in item: value = item[key] if max_value is None or value > max_value: max_value = value result = [item] elif max_value == value: result.append(item) return result
有時候,我們需要從列表中根據對象的屬性選擇最大值。在這種情況下,我們可以使用group_list_max。該函數接受兩個參數:目標列表lst和屬性名key。函數內部首先找到最大值,然後返回所有滿足條件的對象列表。
總結
List根據對象屬性分組是非常常用的操作。我們可以通過多種方法來實現它,並根據實際情況選擇最適合自己的方法。在這裡,我們介紹了group_merge_list、group_lists、group_list和group_list_max這四個函數。它們分別可以實現分組再合併、多個列表分組、單一列表分組和最大值選擇等功能。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/307330.html