1

我有一个字典列表,每个字典都有这样的数据:

'Caitlyn': {'date': (2012, 11, 24), 'player': 'Caitlyn', 'outcome': 'Win', 'gameid': '00006', 'stats': {'assists': 6, 'kills': 13, 'deaths': 4}}

我从具有如下行和数据的文件中生成每个项目:

[00006] Caitlyn - 13/4/6 - Win - 2012-11-24

我想在字典列表中获取匹配玩家姓名的所有索引并打印它们和/或打印其中的数据。我可以打印所有列表并将其格式化以匹配我的文件等,但我不确定如何搜索它,因为它与我在此进行的其他搜索有点不同。

我可以用这个打印整个数据集(我知道很难看,但它有效):

i = 0
for item in records:
    print "\n", "[%s] %s - %s/%s/%s - %s - %s-%s-%s" % (records[i][0], records[i][1]['player'], records[i][1]['stats']['kills'], records[i][1]['stats']['deaths'], records[i][1]['stats']['assists'], records[i][1]['outcome'], records[i][1]['date'][0], records[i][1]['date'][1], records[i][1]['date'][2])
    i = i + 1

有人可以帮忙吗?我需要能够在其中搜索玩家姓名并打印出每个匹配项(并返回索引,以便我可以使用匹配的集合来处理其他内容,而不是再次运行整个搜索),我想我想返回匹配列表,以便我可以使用它们或导出它们或其他任何东西。感谢您的帮助!

[编辑] 由于到目前为止似乎有更多的问题然后答案,这是到目前为止的整个文件:http: //www.pasteall.org/37589/python

这是 stats4.txt: http: //www.pasteall.org/37590

4

2 回答 2

1

很高兴在这样一个意想不到的地方遇到另一个召唤师。

如果您想跟踪与特定英雄一起玩的所有游戏,您可以构建另一个字典,其中英雄名称作为键,游戏统计列表作为值。

代码应如下所示。

records = {}

for line in data:
    # parsing codes

    # store player -> gameid mappings to the index
    if player not in records:
        records[player] = []
    records[player].append(info)

print records['Sona']
# this should print out list of games played with Sona

此更改将使您的数据可以按英雄名称访问,但不再按游戏 ID 排序。如果您仍然需要通过游戏 ID 访问您的数据,我建议您按游戏 ID 存储数据,并构建另一个字典来索引它。这取决于你想对数据做什么。

此外,如果您想对这些数据进行认真的分析,您应该考虑使用一些用于 python 的数据库绑定,例如sqlite3,它包含在标准库中。数据库是专为此类任务设计的应用程序。

于 2012-11-28T01:51:26.523 回答
0

重组数据是否为时已晚?

>>> Caitlyn = {'games': [{'date': (2012, 11, 24),
                      'gameid': '00006',
                      'outcome': 'Win',
                      'stats': {'assists': 6, 'deaths': 4, 'kills': 13}}]}
>>> game02 = {'date': (2012, 11, 24),
              'gameid': '00007',
              'outcome': 'Loss',
              'stats': {'assists': 4, 'deaths': 3, 'kills': 16}}
>>> Caitlyn['games'].append(game02)

您为每个玩家使用一个字典列表,并将它们保存到他们自己的对象中,它可以很好地腌制,或者可以在基于文档的 no-sql 数据库中原样使用。尽管这确实消除了您迄今为止所做的很多工作,但回报是不错的。持久存储,无需解析/写入文本,并且能够使用数据库风格的逻辑来进行您所说的那种搜索。汇总统计数据是另一个很好的奖励。尽管这现在不能回答您的问题,但我希望您至少将其视为一种选择。

于 2012-11-28T01:49:37.643 回答