2012-06-02 48 views
2
a = {2: 4, 3: 2, 5: 1, 7: 1} 

這些鍵代表素數;這些值代表計數器。我想通過遍歷字典鍵*值並總計總和來計算你得到的數字。什麼是最Python的方式來做到這一點?在字典中乘以鍵*值?

>>> [k*v for k,v in a.items()] 
[8, 6, 5, 7] 

>>> sum(k*v for k,v in a.items()) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: 'int' object is not callable 
+0

通過(key,value)元組遍歷(key,value)元組的一般方法是用'yourDict.items()' – ninjagecko

回答

3

這樣:

sum(k*v for k,v in a.items()) 

或語義命名:

sum(p*c for p,c in primesToCounts.items()) 
+0

參見上面的編輯.. – Chris

+0

@Chris:'a'應該是你的字典。例如,在你的問題中,你說'a = {2:4,3:2,5:1,7:1}'。我不相信你用同樣的方式調用這兩件事。此方法在python2和python3中均可用。如果您發現上述錯誤仍然存​​在,請在解釋器中輸入「a」,您會發現一些類似「a == 5」的東西。 – ninjagecko

+3

@Chris:你的問題是你定義了一個名爲'sum'的變量,它影響了名爲'sum'的內置函數。在當前的解釋器中輸入'sum':'23'或其他東西。現在輸入'sum'到一個乾淨的解釋器中:''。你可能試着做'23(k * v for k,v in a.items())' – ninjagecko

2

如何:

>>> a = {2: 4, 3: 2, 5: 1, 7: 1} 
>>> [key * val for key, val in a.items()] 
... [8, 6, 5, 7] 
>>> sum([key * val for key, val in a.items()]) 
... 26 

這非常pythonic。