Python在循环问题上动态增加字典



我正在尝试做如下操作。如果循环条件上的"if语句"匹配,我想使用"if"语句中的一个参数进行增量。

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[value]"`,因此出现了一个错误。我可以通过单独初始化findings_score[value]dict来做到这一点,但我想了解这里的最佳方法。

`错误-名称错误:未定义全局名称"findings_score[value]"

使用defaultdict,在循环外初始化dict:

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,您可以使用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

听起来这就是你想要的:

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

最新更新