所以我写了一个应用程序,通过锦标赛的所有比赛计算足球比赛中的黄牌数量。 所以,让我们说我算上巴西的所有目标,我需要在循环中经历的每场比赛中增加黄牌的数量。 所以我有这个字典cards_per_team_dictionary,看起来像这样:
['Brazil', 0]
并且我不想在每场比赛中增加int值。 我尝试了以下但它似乎不起作用:
def add_yellow_cards_per_team(team_name, cards_num):
cards_per_team_dictionary[team_name] += cards_num
我收到错误:
cards_per_team_dictionary[team_name] += cards_num TypeError: 'set' object is not subscriptable
还有这个:
def add_yellow_cards_per_team(team_name, cards_num):
cards_per_team_dictionary[team_name] + cards_num
但它似乎超过了之前的整数,而不是加起来。 提前谢谢!
答案 0 :(得分:6)
您已创建集而不是 dict :
In [4]: d = {"Brazil",0}
In [5]: d["Brazil"] += 3
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-5-8db3ec29e78a> in <module>()
----> 1 d["Brazil"] += 3
TypeError: 'set' object is not subscriptable
要创建一个字典,您可以添加由冒号分隔的键/值对,即key:value
:
In [6]: d = {"Brazil":0}
In [7]: d["Brazil"] += 3
In [8]: d
Out[8]: {'Brazil': 3}
dict和set literals都使用{}
,一个区别是d = {}
创建一个空dict,其中st = set()
需要创建一个空集。
如果要添加键值配对:
d[key] = value
但是对于重复键,您可以使用dict.setdefault:
data = [("Brazil", 4),("Argentina",6)]
d = {}
for team, count in data:
d.setdefault(team, 0)
d[team] += count
更有效的选择是使用defauldict:
from collections import defaultdict
d = defaultdict(int)
for team, count in data:
d[team] += count
在这两种情况下,如果密钥不存在,则会添加新值,如果确实存在,则密钥的值会增加。