2016-05-12 147 views
1

我想總結數據集,具有組合的唯一密鑰 (例如,在 - (軌道,歌手)如何通過python中的多個鍵來聚合數據集?

,例如:我有3個字段數據集:軌道,歌手,CNT 我想要聚合(總結)通過跟蹤&歌手數據,summzrizing CNT場

sales = [ 
    {'singer': 'Smash', 'track': 'Cry', 'cnt': 10}, 
    {'singer': 'Smash', 'track': 'Cry', 'cnt': 11}, 
    {'singer': 'Smash', 'track': 'Dry', 'cnt': 2}, 
    {'singer': 'Scooter', 'track': 'Shy', 'cnt': 1}, 
    {'singer': 'Scooter', 'track': 'Die', 'cnt': 0}, 
] 

我想有:。

sales = [ 
    {'singer': 'Smash', 'track': 'Cry', 'cnt': 21}, <== summmarized 
    {'singer': 'Smash', 'track': 'Dry', 'cnt': 2}, 
    {'singer': 'Scooter', 'track': 'Shy', 'cnt': 1}, 
    {'singer': 'Scooter', 'track': 'Die', 'cnt': 0}, 
] 

感謝您的回覆

回答

1

您基本上正在尋找cntSum,它由singertrack組成。在Django中,這可以使用valuesannotatein conjunction來實現。

因此,嘗試這樣的事:

Sale.objects.values('singer', 'track').annotate(Sum('cnt')) 
+0

謝謝,但你可以看到我的數據集,而不是對象進行操作;比如何將我的數據集轉換爲對象來使用你的func? – mishaikon

+0

啊,我沒有注意到,那麼'Django'在這裏幫不了你,你需要自己做,並且據我所知,你已經設法做到了。 – Todor

0

創建了自己的解決方案:

# Aggregate dataset by multiple columns 
# @source http://stackoverflow.com/questions/24286933/how-to-reduce-aggregate-a-list-of-dicts-per-multiple-keys-in-python 
sales = [ 
    {'singer': 'Smash', 'track': 'Cry', 'cnt': 10}, 
    {'singer': 'Smash', 'track': 'Cry', 'cnt': 11}, 
    {'singer': 'Smash', 'track': 'Dry', 'cnt': 2}, 
    {'singer': 'Scooter', 'track': 'Shy', 'cnt': 1}, 
    {'singer': 'Scooter', 'track': 'Die', 'cnt': 0}, 
] 

sales_gr = {} 

for item in sales: 

    key = str(''.join([item['track'], item['singer']])) 
    if key not in sales_gr: 
     sales_gr[key] = {'track': item['track'], 'singer':item['singer'], 'cnt':0} 

    sales_gr[key]['cnt'] += item['cnt'] 

print(sales_gr) 
相關問題