2015-07-01 55 views
1

我正在嘗試執行下面的操作。如果循環條件中的「If語句」匹配,我希望使用「If」語句中的一個參數進行增量。Python在循環問題上動態增加字典

value = [0,1,2,3,4,5,6] 
data = {'value': 3, 'foo': 'foo'} 
for value in value: 
    if (int(data['value']) == value and data['foo'] == 'foo'): 
     findings_score[value] = findings_score[value] + 1 

我試圖做到這一點的Python和我得到一個錯誤,因爲價值觀 - 「findings_score [值]」`需要被初始化。我可以通過單獨初始化results_score [value]字典來實現這一點,但我想在此理解最佳方法。

'錯誤 - NameError:全局名稱「findings_score [值]」沒有定義

+0

我沒有看到findings_rec_risk_score'的'一提,在你的代碼...是與「results_score」相同?如果是這樣,你應該編輯你的問題來澄清。 –

+0

您的迭代變量與iterable('value')的名稱相同,並且我沒有看到任何名爲'findings_rec_risk_score'的東西。 – TigerhawkT3

+0

恩,請問你能檢查你的空格嗎? – NightShadeQueen

回答

0

使用defaultdict,初始化外循環的字典:

from collections import defaultdict 
findings_score = defaultdict(int) 
values = [0,1,2,3,4,5,6] 

for value in values: 
    if int(data['value']) == value and data['foo'] == 'foo': 
     findings_score[value] += 1 

使用普通的字典,你可以使用dict.setdefault或dict.get:

findings_score = {} 
values = [0,1,2,3,4,5,6] 

for value in values: 
    if int(data['value']) == value and data['foo'] == 'foo': 
     findings_score[value] = findings_score.get(value, 0) + 1 

findings_score = {} 
values = [0,1,2,3,4,5,6] 

for value in values: 
    if int(data['value']) == value and data['foo'] == 'foo': 
     findings_score.setdefault(value, 0) 
     findings_score[value] += 1 

如果你想在值的所有元素將在輸出可以使用dict.fromkeys:

findings_score = dict.fromkeys(values,0) 
for value in values: 
    if int(data['value']) == value and data['foo'] == 'foo': 
     findings_score[value] += 1 
+0

@ user4723845,沒有問題,你可以使用正常詞典與dict.setdefault或dict.get,但一個defautdict是最有效的 –

+0

但現在,我無法引用值:例如print results_score [2] – user4723845

+0

@ user4723845,不確定你的意思,鍵是來自值的每個值。如果if語句的計算結果爲True,它們只會被添加,儘管不要期望它們全部。在你的例子中只有'3'會被添加 –

0

聽起來好像這是你想要的東西:

values = [0,1,2,3,4,5,6] 
findings_score = {} 

data = {'value': 3, 'foo': 'foo'} 

for value in values: 
    if (int(data['value']) == value and data['foo'] == 'foo'): 
     if value in findings_score: 
      findings_score[value] = findings_score[value] + 1 
     else: 
      findings_score[value] = 1