2017-06-17 108 views
-4

我有以下字典的名單稱爲「資產」:在python總和字典中的值通過特定按鍵

assets = [ 
{ 
    "type": "site", 
    "pcd_sector_id": 1, 
    "cells": 3, 
    "technology": "LTE" 
}, 
{ 
    "type": "site", 
    "pcd_sector_id": 2, 
    "cells": 5, 
    "technology": "LTE-Advanced" 
}, 
{ 
    "type": "site", 
    "pcd_sector_id": 2, 
    "cells": 3, 
    "technology": "LTE" 
} 
] 

我要總結所有可能的技術的「細胞」(有> 50)。我看了很多問題,但是我找不到任何基於字符串變量的總和數值。

我知道如何在Pandas中輕鬆做到這一點,但我正在尋找一個純粹的Python解決方案。

編輯:鑑於反饋,我對問題和數據做了一些更改。所需的輸出將具有細胞的數量以科技爲每個郵政編碼部門:

aggregated = [ 
{ 
"pcd_sector_id": 1, 
"LTE": 3, 
"LTE-Advanced": 0 
} 
{ 
"pcd_sector_id": 2, 
"LTE": 3, 
"LTE-Advanced": 5 
} 
] 
+2

你能否提供你正在尋找的輸出。 – Stack

回答

3

你想要做的是首先檢索所有的「細胞」在一個列表中的項目:

cells = [d['cells'] for d in assets] 

# or 

import operator 

cells = map(operator.itemgetter('cells'), assets) 

而且

sum(d['cells'] for d in assets) 

# or 

sum(map(operator.itemgetter('cells'), assets)) 

兩種方法都是好的較小的列表(我覺得最上面的一個會更快),但底部一個我:那麼就使用內置sum功能總結他們對於大型列表肯定更快:

$python3 -m timeit "assets = [{'cells': 1}] * 1000; import operator" "sum(d['cells'] for d in assets)" 
10000 loops, best of 3: 67.4 usec per loop 
$python3 -m timeit "assets = [{'cells': 1}] * 1000; import operator" "sum(map(operator.itemgetter('cells'), assets))" 
10000 loops, best of 3: 47.5 usec per loop 
0

您需要檢索字典的特定列並對其進行總結。

count =0 
for i in assets: 
    count = count + i['cells'] 

>>Demo<<

+0

downvote的任何解釋? – Ravi

0

一號線的解決方案:

>>> sum([asset['cells'] for asset in assets]) 
+0

刪除外面的'[]'。否則,建立一個不需要的臨時列表。 – Wombatz

+0

謝謝@wombatz。我會更新 –