Python数据结构推荐?

标签 python

我目前有一个字典结构:每个值都是一个包含数值的列表。这些数字列表中的每一个都包含您可以称之为主键的内容(借用 SQL 习语),其中包含前三个值,即:年份、球员标识符和团队标识符。这是字典的关键。

因此,您可以通过传递年份、玩家 ID 和团队 ID 的值来获得唯一的行,如下所示:

statline = stats[(2001, 'SEA', 'suzukic01')]

这会产生类似的东西

[305, 20, 444, 330, 45]

我想更改此数据结构,以便通过这三个键中的任何一个快速求和:这样您就可以通过传入年份之一、球员 ID 和球队来轻松地对数字列表中给定索引的总计进行切片ID,然后是索引。我希望能够做类似的事情

hr_total = stats[year=2001, idx=3]

其中 idx 3 对应于将检索的数字列表中的第三列。

有什么想法吗?

最佳答案

阅读数据仓库。任何书。

阅读星型模式设计。任何书。严重地。

您有几个维度:年份、球员、球队。

你有一个事实:分数

您想拥有这样的结构。

然后您想要像这样创建一组维度索引。

years = collections.defaultdict( list )
players = collections.defaultdict( list )
teams = collections.defaultdict( list )

您的事实表可以是collections.namedtuple。你可以使用这样的东西。

class ScoreFact( object ):
    def __init__( self, year, player, team, score ):
        self.year= year
        self.player= player
        self.team= team
        self.score= score
        years[self.year].append( self )
        players[self.player].append( self )
        teams[self.team].append( self )

现在您可以找到给定维度值中的所有项目。这是一个附加到维度值的简单列表。

years['2001'] are all scores for the given year.

players['SEA'] are all scores for the given player.

等您可以简单地使用 sum() 将它们相加。多维查询是这样的。

[ x for x in players['SEA'] if x.year == '2001' ]

关于Python数据结构推荐?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1698734/

相关文章:

python - 无法使用 matplotlib 重新创建 catplot

android - 为 TensorFlow 导出的 .pb 文件添加权重

python - 灵活、可靠和便携的服务发现

python - 如何通过模型的方法 django 更新对象

python - 使用脚本填充 Sql 表

javascript - Django : datepicker in ModelForm

python - 将 re.sub 与组一起使用

python - 使用不同的参数测试相同的功能

python - 如何将 Python 代码保持在 80 个字符以下而不使其变得丑陋?

python - 执行流程 - ansible play 是如何工作的?