使用dict
实现分页解决方案是否有更好的方法?
我有dict
个图片名称和网址。
我需要一次16个键值对,具体取决于用户的请求,即页码。
这是一种寻呼解决方案。
我可以这样实现:
例如:
dict = {'g1':'first', 'g2':'second', ... }
现在我可以使用以下方法创建键到数字的映射:
ordered={}
for i, j in enumerate(dict):
ordered[i]=j
然后检索它们:
dicttosent={}
for i in range(paegnumber, pagenumber+16):
dicttosent[ordered[i]] = dict[ordered[i]]
这是一种正确的方法吗?或者这会给出随机结果吗?
答案 0 :(得分:1)
排序。
引自official documentation关于dict
:
键和值以任意顺序迭代,这是非随机的,在Python实现中各不相同,并且取决于字典的插入和删除历史。
因此,出于您的目的,您无法了解迭代顺序的先验。
OrderedDict
正是您要找的: OrderedDict是一个记住首次插入密钥的顺序的字典。
似乎不是这样。
我不知道是否有库可以为您处理所有这些信息(也许其他人可以告诉您),但似乎您正试图模仿OrderedDict
行为。
您可以直接使用OrderedDict
,或者如果您想枚举您的信息,list
可以这样做。
答案 1 :(得分:1)
imagelist[pagenumber: pagenumber+16]
。答案 2 :(得分:0)
这取决于。如果您的dict
在申请的有效期内没有变化,并且您不关心在您的词典中订购这些项目,那么您应该没问题。
如果没有,您应该使用collections.OrderedDict
或保留已排序的密钥列表,具体取决于您的要求。使用普通dict
并不能保证迭代顺序,因此在输入dict的每次修改后,您都可以获得不同的结果。
答案 3 :(得分:0)
为什么不创建映射到您网页的dict
?您可以从两个列表开始,一个包含您的图像名称,另一个包含URL。
perPage = 16
nameList = ['g1', 'g2', ... ]
urlList = ['first', 'second', ... ]
# This is a generator expression that can create
# the nested dicts. You can also use a simple
# for loop
pageDict = dict(( (i, dict(( (nameList[j], urlList[j])
for j in range(i*perPage, i*perPage+perPage))))
for i in range(len(nameList) / perPage)))
它从0
开始编号,因此您的第一页将是pageDict[0]
。
......现在我再看一遍,那个生成器表达看起来很糟糕。 :|