鍍金池/ 問答/Python  數(shù)據(jù)庫/ python列表 如何使用 mongodb聚合的類似方法$group篩選

python列表 如何使用 mongodb聚合的類似方法$group篩選

[
     {'_id': ObjectId('5abb4f9ca7e2c54c757b3e48'),
      'amount': 8400,
      'buyerEmail': 'otzYzwMh24edWk8NxSJOqCSZREe0',
      'from': 'weixin',
      'orderDate': datetime.datetime(2018, 3, 28, 8, 17, 28, 940000),
      'orderid': '2018032816173212079',
      'real': 8400,
      'rechargeDate': datetime.datetime(2018, 3, 28, 8, 17, 41, 877000),
      'status': 1,
      'tradeNo': '4200000099201803287230332578',
      'uid': ObjectId('5abb36051a62067bf7e30178')
    },
    {'_id': ObjectId('5b6699f6df03ec3294d7c0a4'),
      'amount': 100,
      'buyerEmail': 'otzYzwC3YwRdu7QrWLXqS3VRJybI',
      'from': 'weixin',
      'orderDate': datetime.datetime(2018, 8, 5, 6, 32, 21, 442000),
      'orderid': '2018080514322245193',
      'real': 100,
      'rechargeDate': datetime.datetime(2018, 8, 5, 6, 33, 0, 381000),
      'status': 1,
      'tradeNo': '4200000148201808052403940202',
      'uid': ObjectId('5a5738411a62061972e128cb')
    },
    .....
]

如何把同一個uid的整合一起,并只顯示uid real from rechargeDate的元素?
類似mongodb聚合的$group
理想結(jié)果:

[
    {'uid':xxxxxxxxxxxxxxxx:
        [
            {
                'real':xxx,
                'from':xxx,
                'recharge':xxx,
            },
            {
                'real':xxx,
                'from':xxx,
                'recharge':xxx,
            },
            {
                'real':xxx,
                'from':xxx,
                'recharge':xxx,
            },
        ]
    },
        {'uid':xxxxxxxxxxxxxxxx:
        [
            {
                'real':xxx,
                'from':xxx,
                'recharge':xxx,
            },
            {
                'real':xxx,
                'from':xxx,
                'recharge':xxx,
            },
            {
                'real':xxx,
                'from':xxx,
                'recharge':xxx,
            },
        ]
    },
    ...
]
回答
編輯回答
愛礙唉

使用python的collections

import json
from collections import defaultdict


def main():
    ret = defaultdict(list)
    data = [
     {'_id': '5abb4f9ca7e2c54c757b3e48',
      'amount': 8400,
      'buyerEmail': 'otzYzwMh24edWk8NxSJOqCSZREe0',
      'from': 'weixin',
      'orderid': '2018032816173212079',
      'real': 8400,
      'status': 1,
      'tradeNo': '4200000099201803287230332578',
      'uid': '5abb36051a62067bf7e30178' # 需要把ObjectId處理成字符串
    },
    {'_id': '5b6699f6df03ec3294d7c0a4',
      'amount': 100,
      'buyerEmail': 'otzYzwC3YwRdu7QrWLXqS3VRJybI',
      'from': 'weixin',
      'orderid': '2018080514322245193',
      'real': 100,
      'status': 1,
      'tradeNo': '4200000148201808052403940202',
      'uid': '5a5738411a62061972e128cb' # 需要把ObjectId處理成字符串
    },
    {'_id': '5b6699f6df03ec3294d7c0a4',
      'amount': 200,
      'buyerEmail': 'otzYzwC3YwRdu7QrWLXqS3VRJybI',
      'from': 'weixin',
      'orderid': '2018080514322245193',
      'real': 200,
      'status': 1,
      'tradeNo': '4200000148201808052403940202',
      'uid': '5a5738411a62061972e128cb' # 需要把ObjectId處理成字符串
    },
    ]
    
    for d in data:
        ret[d.get('uid')].append(d)
        
    print(json.dumps(ret, indent=2))
if __name__ == '__main__':
    main()
    
2018年6月29日 16:27