我理解在Python中存储数据的不同方式,但我无法确定如何使用我的需求。
我做了一个小型的客户端/服务器游戏,我希望他们的猜测数量是他们的得分。然后我想将他们的名字(目前是IP地址)和分数写成一个文件,以创建一个高分列表。虽然我可以完美地做到这一点,但我只想要存储最多5个分数并且能够对它们进行排序,这样当我向用户显示高分和名字时,最高(最好的分数)在顶部。我还想允许用户名不止一次存在。
虽然编写数据并阅读它很容易,但我真的无法弄清楚要使用哪种数据类型,在某些情况下字典会很有意义,但一键只能有一个值和密钥只能存在一次,一个列表与其中包含的其他特定值无关,因此无法使用,并且元组似乎无法排序。
我正在考虑将每一行读入一个sperate列表,然后使用索引来比较分数,这样我就可以对它们进行排序并将其写回文件,但在我看来这会对内存造成不良影响吗?
在不使用SQL等极端学习曲线的情况下,将名称和得分保存在一起的最简单方法是什么?
答案 0 :(得分: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
写作:
答案 1 :(得分:0)
您可以存储元组列表,每个元组包含特定顺序的数据(例如,分数,名称等)。然后,您可以使用list.sort()函数对列表进行排序,方法是定义一个函数f来比较分数并在sort()中传递函数。