我有一个字典列表,每个字典都有这样的数据:
'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
答案 0 :(得分: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,它包含在标准库中。数据库是专为这类任务设计的应用程序。
答案 1 :(得分: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)
你为每个玩家使用一个词典列表,并将它们保存到自己的对象中,它可以很好地腌制,或者它可以在document-based no-sql database中使用。虽然这确实消除了你迄今为止所做的大量工作,但收益还是不错的。持久存储,不解析/写入文本,以及使用数据库样式逻辑进行您正在讨论的搜索的能力。综合统计数据是我想到的另一个好的奖励。虽然现在没有回答你的问题 ,但我希望你至少可以考虑这个选项。