【问题标题】:Max-valued-elements from list group by element's code列表中的最大值元素按元素的代码分组
【发布时间】:2016-06-15 11:16:03
【问题描述】:

我想从字典列表中提取按代码分组的最大运行日期的所有元素。 这是我到目前为止得到的:

import datetime
from itertools import groupby

commission_list = [
    {'code': 'COMMISSION_CODE1', 'runningdt': datetime.datetime.strptime('2016-04-12', '%Y-%m-%d'), 'value': 150},
    {'code': 'COMMISSION_CODE1', 'runningdt': datetime.datetime.strptime('2016-04-12', '%Y-%m-%d'), 'value': 450},
    {'code': 'COMMISSION_CODE1', 'runningdt': datetime.datetime.strptime('2016-04-16', '%Y-%m-%d'), 'value': 140},
    {'code': 'COMMISSION_CODE1', 'runningdt': datetime.datetime.strptime('2016-04-17', '%Y-%m-%d'), 'value': 120},
    {'code': 'COMMISSION_CODE1', 'runningdt': datetime.datetime.strptime('2016-04-17', '%Y-%m-%d'), 'value': 220},

    {'code': 'COMMISSION_CODE2', 'runningdt': datetime.datetime.strptime('2016-04-11', '%Y-%m-%d'), 'value': 150},
    {'code': 'COMMISSION_CODE2', 'runningdt': datetime.datetime.strptime('2016-04-15', '%Y-%m-%d'), 'value': 140},
    {'code': 'COMMISSION_CODE2', 'runningdt': datetime.datetime.strptime('2016-04-16', '%Y-%m-%d'), 'value': 160},
    {'code': 'COMMISSION_CODE2', 'runningdt': datetime.datetime.strptime('2016-04-19', '%Y-%m-%d'), 'value': 210},

    {'code': 'COMMISSION_CODE3', 'runningdt': datetime.datetime.strptime('2016-04-16', '%Y-%m-%d'), 'value': 330},
    {'code': 'COMMISSION_CODE3', 'runningdt': datetime.datetime.strptime('2016-04-20', '%Y-%m-%d'), 'value': 310},
    {'code': 'COMMISSION_CODE3', 'runningdt': datetime.datetime.strptime('2016-04-20', '%Y-%m-%d'), 'value': 410},
]

latest_run_commissions = []
for key, commission_group in groupby(commission_list, lambda x: x['code']):
    tem = list(commission_group)
    the_last_com = (max(tem, key=lambda x: x['runningdt']))
    filtered_objs = filter(lambda f: f['runningdt'] == the_last_com['runningdt'], tem)
    for o in filtered_objs:
        latest_run_commissions.append(o)

for f in latest_run_commissions:
    print(f)
print(" ")

有没有更有效和高效的方法?您的意见或建议将不胜感激和欢迎。

【问题讨论】:

    标签: python list group-by max


    【解决方案1】:

    您可以使用operator 模块中的itemgetter 来有效地执行此操作。

    In [16]: from operator import itemgetter
    
    In [17]: sorted_data = sorted(commission_list, key=itemgetter('code'))
    
    In [18]: for g, data in groupby(sorted_data, key=itemgetter('code')):
       ....:     print(max(data, key=itemgetter('runningdt')))
       ....:     
    {'runningdt': datetime.datetime(2016, 4, 17, 0, 0), 'code': 'COMMISSION_CODE1', 'value': 120}
    {'runningdt': datetime.datetime(2016, 4, 19, 0, 0), 'code': 'COMMISSION_CODE2', 'value': 210}
    {'runningdt': datetime.datetime(2016, 4, 20, 0, 0), 'code': 'COMMISSION_CODE3', 'value': 310}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-21
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多