基于值的字典列表中的不同行

2024-06-17 12:13:46 发布

您现在位置:Python中文网/ 问答频道 /正文

下面是示例输入sampleInputDbData

def sampleInputDbData( self ):
    return \
    [
        {'FundCode': 300, 'FundName': 'First Fund', 'ProdStartDate': dt(2016,7,3,4,5,6), 'ProdEndDate': dt(2016,8,3,4,5,6), 'FundFee': 100},
        {'FundCode': 300, 'FundName': 'First Fund', 'ProdStartDate': dt(2016,8,3,4,5,6), 'ProdEndDate': dt(2016,8,3,6,5,6), 'FundFee': 101 },
        {'FundCode': 300, 'FundName': 'First Fund', 'ProdStartDate': dt(2016,8,3,6,5,6), 'ProdEndDate': dt(2016,8,15,6,5,6), 'FundFee': 102 },
        {'FundCode': 301, 'FundName': 'Second Fund', 'ProdStartDate': dt(2016,7,3,4,5,6), 'ProdEndDate': dt(2016,8,3,6,5,6), 'FundFee': 110},
        {'FundCode': 301, 'FundName': 'Second Fund', 'ProdStartDate': dt(2016,8,3,6,5,6), 'ProdEndDate':  dt(2016,8,15,6,5,6), 'FundFee': 111},
        {'FundCode': 302, 'FundName': 'Third Fund', 'ProdStartDate': dt(2016,8,3,6,5,6), 'ProdEndDate':  dt(2016,8,15,6,5,6), 'FundFee': 120},
    ]

我想要的是这个sampleoutputdbddata作为输出

def sampleOutputDbData( self ):
    return \
    [
        {'FundCode': 300, 'FundName': 'First Fund', 'ProdStartDate': dt(2016,8,3,6,5,6), 'ProdEndDate': dt(2016,8,15,6,5,6), 'FundFee': 102 },
        {'FundCode': 301, 'FundName': 'Second Fund', 'ProdStartDate': dt(2016,8,3,6,5,6), 'ProdEndDate':  dt(2016,8,15,6,5,6), 'FundFee': 111},
        {'FundCode': 302, 'FundName': 'Third Fund', 'ProdStartDate': dt(2016,8,3,6,5,6), 'ProdEndDate':  dt(2016,8,15,6,5,6), 'FundFee': 120},
    ]

决策因素基本上是:基于键的最大值获取所有唯一的FundCode。dt是datetime类型


Tags: self示例returndefdtfirstsecondthird
1条回答
网友
1楼 · 发布于 2024-06-17 12:13:46

这项工作:

from collections import defaultdict
from operator import itemgetter

code_dict = defaultdict(list)
for d in sampleInputDbData:
    code_dict[d["FundCode"]].append(d)

output_data = [max(d, key=itemgetter("ProdEndDate")) for d in code_dict.values()]

我首先创建一个默认dict,用于按FundCode临时排序。每个键将包含一个列表,其中包含具有相同FundCode的所有dict。然后,我从每个列表中取最后一个ProdEndDate

相关问题 更多 >