分享
为什么问答平台  ›  专栏  ›  技术社区  ›  M V

从dict列表中获取最新的dict消息 - Get last updated dict message from list of dict

  •  1
  • M V  · 技术社区  · 1 周前

    注意:只更新长度,类别保持静态。我知道哪一个是最新的更新,因为对于该实体,它将具有最新的时间戳

    [{u'length': u'1',
      u'category': u'3',
      u'entity': u'entityA',
      u'timestamp': u'1562422690'},
     {u'length': u'1.1',
      u'category': u'3',
      u'entity': u'entityA',
      u'timestamp': u'1562422691'},
     {u'length': u'1.2',
      u'category': u'3',
      u'entity': u'entityA',
      u'timestamp': u'1562422692'},
     {u'length': u'0.9',
      u'category': u'3',
      u'entity': u'entityB',
      u'timestamp': u'1562422689'},
     {u'length': u'0.9',
      u'category': u'3',
      u'entity': u'entityB',
      u'timestamp': u'1562422690'}]
    

    我需要操纵这个,所以我只得到:

    {u'entityA':{u'length': u'1.2', 
                 u'category': u'3', 
                 u'entity': u'entityA', 
                 u'timestamp': u'1562422692'},
     u'entityB':{u'length': u'0.9', 
                 u'category': u'3', 
                 u'entity': u'entityB', 
                 u'timestamp': u'1562422690'}}
    

    select * from
    (select
       length, 
       category, 
       entity, 
       timestamp, 
       row_number () over (partition by entity order by timestamp desc) as rnumb
    from data
    )foo
    where rnumb = 1
    

    1 回复  |  直到 1 周前
        1
  •  0
  •   Alexander    1 周前

    假设您的数据被分配给一个名为 data sorted .对于每个实体( set(d.get('entity') for d in data) [-1]

    >>> {entity: sorted([d for d in data if d.get('entity') == entity], key=lambda x: x['timestamp'])[-1]
         for entity in set(d.get('entity') for d in data)}
    {'entityA': {'length': '1.2',
      'category': '3',
      'entity': 'entityA',
      'timestamp': '1562422692'},
     'entityB': {'length': '0.9',
      'category': '3',
      'entity': 'entityB',
      'timestamp': '1562422690'}}