2013-07-30 80 views
3

我有一個名字和年齡的字典。一些名字是相同的。我想總結相同名字的年齡。字典元素的總和

我的假數據是這樣的:

pete: 33 
ann: 7 
ruth: 3 
ann: 5 
austin: 90 

在這些例子中有兩個人工神經網絡。所以我想總結兩個年代的年齡。 目前,我有一本字典:

dict = {'pete':33,'ann':7,'ruth':3,'ann':5,'austin':90} 

我的結果應該是這樣的

dict = {'pete':33,'ann':12,'ruth':3,'austin':90} 

pete: 33 
ann: 12 
ruth: 3 
austin: 90 

我認爲把數據字典中這樣是不是最好的解決方案。存儲數據並將其處理到輸出中的其他解決方案是什麼?

+1

'{'pete':33,'ann':7,'ruth':3,'ann':5,'austin':90}' - 詞典不能有重複的鍵。如果你打印這個字典,你會看到只有一個「ann」條目存活。 –

+0

是的,我想到了。這就是爲什麼我正在尋找不同的方式來存儲/處理數據。 – ustroetz

+0

@ user1738154那麼,你最初的數據是什麼?它,不能是一個字典,因爲數據不會在那裏。它在一個文件中? –

回答

4

您的假數據不能看起來像那樣。在字典中使用相同的鍵有兩個條目是不可能的,也許你打算使用不同的數據結構? (不是字典)。但是,如果你的數據是這樣的:

input = [('pete', 33), ('ann',7), ('ruth',3), ('ann',5), ('austin',90)] 

然後一個defaultdict將是一個不錯的主意:

from collections import defaultdict 
d = defaultdict(int) 

for k, v in input: 
    d[k] += v 

d 
=> defaultdict(<type 'int'>, {'pete': 33, 'ann': 12, 'ruth': 3, 'austin': 90}) 

或使用Counter

from collections import Counter 
d = Counter() 

for k, v in input: 
    d.update({k:v}) 

d 
=> Counter({'austin': 90, 'pete': 33, 'ann': 12, 'ruth': 3}) 

而另一種解決方案,無需導入額外的庫:

d = {} 
for k, v in input: 
    if k in d: 
     d[k] += v 
    else: 
     d[k] = v 

d 
=> {'pete': 33, 'ann': 12, 'ruth': 3, 'austin': 90} 
+2

這不是一個答案,這是一個評論。 –

+0

感謝您的答案!我知道我沒有在問題中提出這個問題。但是,還有沒有導入任何東西的方法?背景是因爲我喜歡在ArcGIS領域計算器中執行此操作。 – ustroetz

+0

當然,通過多做一些工作,您可以完成與庫中所做的相同的工作。查看我更新的答案 –

3
data = [('pete', 33), ('ann', 7), ('ruth', 3), ('ann', 5), ('austin', 90)] 

由於字符串不能包含重複鍵,所以可以從元組列表開始,而不是使用元組列表。

from collections import defaultdict 
combined = defaultdict(int) 

for name, age in data: 
    combined[name] += age 

然後使用defaultdict建立dict。訣竅是,defaultdict(int)創建一個詞條默認爲0,所以你不必處理不存在的鍵。

+0

Python 2.7引入'collections.Counter',可以更方便,但我仍然通常默認爲'defaultdict'。 – user2357112

3

而不是使用字典,你需要使用的元組

pairs = [ ('pete', 33), ('ann', 7), ('ruth', 3), ('ann', 5), ('austin', 90) ] 

的列表然後你可以使用defaultdict計算的總和:

from collections import defaultdict 
answer = defaultdict(int) 
for name, number in pairs: 
    answer[name] += number 

print(answer) 

的defaultdict作品通過調用特定的函數( int)爲任何不存在的鍵提供默認值(int()方便返回0);那麼對於每次迭代,該數字都被添加到該數字中。