包含字典值的字典:尝试在python中对这些键求和

2024-10-17 00:32:03 发布

您现在位置: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}}

希望团队有一个方法getTotals(self,category),如果您调用:

^{pr2}$

在这种情况下,该方法将产生:

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())

Tags: 方法inselfgameforreturn字典lib
3条回答
def total(category):
    return sum([ghl[man][category] for man in game.home.lineup.keys()])

可以使用生成器表达式:

def total(category):
    return sum(value.get(category, 0) for value in game.home.lineup.values())

>>> total('HR')
1104

我使用dict.get在任何字典中缺少该类别时将其设为默认值0。在

自我版本:

^{pr2}$
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

有点啰嗦,但是我。请注意第一个参数,即实例。现在,如果希望它成为所有团队对象的一部分,则需要修改类:

^{pr2}$

这应该将所述对象添加到类定义中,并使现有对象能够从此处使用它。我编写了一些Python已经有几个月了,但它应该可以工作。在

相关问题 更多 >