一、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-hk/n/307330.html
微信掃一掃
支付寶掃一掃