0

我知道在 Python 中存储数据有不同的方法,但我不知道用什么来满足我的需要。

我制作了一个小型客户端/服务器游戏,我希望将他们的猜测数量作为他们的分数。然后我想将他们的名字(当前是 IP 地址)连同分数一起写入一个文件,以创建一个高分列表。虽然我可以完美地做到这一点,但我只希望最多存储 5 个分数并能够对它们进行排序,以便当我向用户显示高分和名称时,最低的(最好的分数)在顶部。我还想允许用户名多次存在。

虽然写入和读取数据很容易,但我真的不知道要使用什么数据类型,字典在某些情况下会很有意义,但是键只能有一个值,并且键只能存在一次,列表与其中包含的其他特定值无关,因此使用起来都没有意义,而且看起来也无法对元组进行排序。

我正在考虑将每一行读入一个单独的列表,然后使用索引来比较分数,这样我就可以对它们进行排序并将其写回文件,但在我看来这对内存不好?

在不使用 SQL 等极端学习曲线的情况下,将名称和分数保存在一起的最简单方法是什么?

4

2 回答 2

1

具有相当小的学习曲线的格式将是json.

它基本上是一个字典,每个键可以是数字、字符串、布尔值、浮点数、数组或另一个字典(可能有更多类型)。

>>> d = {}
>>> d['someId'] = {'somekey': [0,2,3]}
>>> d
{'someId': {'somekey': [0, 2, 3]}}
>>> d['someId']['somekey']
[0, 2, 3]
>>> d['someId']['number'] = 23456776543
>>> d['someId']['number']
23456776543

一旦你掌握了json考虑 mongo 的 ODM / ORM 的窍门。

或者暂时添加一个辅助函数来按分数拉取分数和名称进行排序。

>>> d = {'user1': {'name': 'howdy', 'score': 11},'user2': {'name': 'howdy2', 'score': 12}}
>>> d.keys()
['user2', 'user1']
>>> for user_id in d.keys():
...     print(d[user_id]['name'], d[user_id]['score'])
... 
('howdy2', 12)
('howdy', 11)

如果有必要设置关系数据和模型,请考虑sqlite它具有基础知识,而不像 postgres 或 mysql 那样复杂。

示例json阅读:

示例json写作:

于 2015-11-01T15:02:23.940 回答
0

您可以存储一个元组列表,每个元组包含特定顺序的数据(例如分数、名称等)。然后,您可以使用 list.sort() 函数对列表进行排序,方法是定义一个函数 f 来比较分数并将该函数传递给 sort()。

于 2015-11-01T15:03:49.733 回答