我在 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},
]
我想要的是 sampleOutputDbData 作为输出
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},
]
决定因素基本上是:根据密钥 ProdEndDate 的最大值获取所有唯一 FundCode 。 dt是类型日期时间
答案 0 :(得分:0)
这有效:
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
的临时排序。每个密钥都将包含一个列表,其中所有dicts具有相同的FundCode
。然后,我从每个列表中取出最后一个ProdEndDate
。