字典值为字典:在Python中尝试对这些键求和
数据结构是一个字典,每个值又是一个字典,像这样:
>>> from lib import schedule
>>> schedule = schedule.Schedule()
>>> game = schedule.games[0]
>>> game.home
<lib.schedule.Team instance at 0x9d97c6c>
>>> game.home.lineup
{'guerv001': {'HR': 392, '1B': 1297}, 'kendh001': {'HR': 12, '1B': 201}, 'andeg001': {'HR': 272, '1B': 1572}, 'mattg002': {'HR': 104, '1B': 632}, 'figgc001': {'HR': 26, '1B': 672}, 'iztum001': {'HR': 16, '1B': 253}, 'huntt001': {'HR': 213, '1B': 834}, 'quinr002': {'HR': 23, '1B': 200}, 'napom001': {'HR': 46, '1B': 96}}
我希望 Team 有一个方法叫 getTotals(self, category),当你调用这个方法时:
game.home.getTotals('HR')
这个方法在这种情况下会返回:
1104
基本上你可以看到我想要做的事情。有什么想法吗?
更新:我现在用两个列表推导式实现了这个功能,但我想把它简化成一个:
def getTotals(self, category):
cats = [x for x in self.lineup.values()]
return sum([x[category] for x in cats])
另一个更新:根据 inspectorg4dget 的反馈,我已经搞定了。谢谢!
def getTotals(self, category):
return sum(self.lineup[man][category] for man in self.lineup.keys())
最终更新:根据 Nadia 的反馈,这里有另一种方法:
def getTotals(self, category):
return sum(value.get(category, 0) for value in self.lineup.values())
3 个回答
0
def myGetTotals(self, team):
count = 0
for aKey in self.lineup:
if team in self.lineup[aKey]:
count = count + self.lineup[aKey][team]
return count
这段话有点啰嗦,不过没关系。要注意第一个参数,它是实例。如果你想让这个功能适用于所有团队对象,你需要修改这个类:
lib.schedule.Team.getTotals = myGetTotals
这样做会把这个对象添加到类的定义中,并且让已经存在的对象从此也能使用它。我已经有几个月没写Python了,但这个方法应该是有效的。
1
在编程中,有时候我们需要把一些东西放到一个地方,然后再从那个地方拿出来。这个过程就像把书放进书架,然后再从书架上取书一样。
有些时候,我们会用一种叫做“变量”的东西来存储信息。变量就像一个盒子,你可以把不同的东西放进去,比如数字、文字或者其他信息。然后你可以随时打开这个盒子,看看里面有什么。
在编程中,使用变量可以让我们更方便地管理和使用数据。比如,如果你想计算一个数字的平方,你可以把这个数字放到一个变量里,然后用这个变量来进行计算。
总之,变量帮助我们在程序中存储和使用信息,就像书架帮助我们存放和找到书一样。
def total(category):
return sum([ghl[man][category] for man in game.home.lineup.keys()])
4
你可以使用生成器表达式:
def total(category):
return sum(value.get(category, 0) for value in game.home.lineup.values())
>>> total('HR')
1104
我用了 dict.get 这个方法,这样如果某个字典里缺少某个类别,它的默认值就会变成0。
自定义版本:
def total(self, category):
return sum(value.get(category, 0) for value in self.lineup.values())