如何在Python中使用字典对象实现分页方案
有没有更好的方法来用 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]]
这样做合适吗?还是说会得到随机的结果呢?
4 个回答
1
这要看情况。如果你的 dict
在应用程序运行期间不会改变,而且你对字典里项目的顺序不在乎,那这样用是没问题的。
但如果不是这样的话,你可能需要使用 collections.OrderedDict
,或者根据你的需求保持一个有序的键列表。普通的 dict
在遍历时没有顺序保证,所以每次修改字典后,你可能会得到不同的结果。
2
1) 这样做会得到随机结果吗?
可以说是的。
根据官方文档关于dict
的说明:
字典中的键和值是以一种任意的顺序进行遍历的,这个顺序不是随机的,会因不同的Python版本而异,并且还取决于字典的插入和删除历史。
所以在你使用之前,你无法提前知道遍历的顺序是什么。
OrderedDict
是你需要的东西:OrderedDict是一个字典,它记住了键第一次被插入的顺序。
2) 这真的是一个合适的方法吗?
看起来不是。
我不知道是否有库可以为你处理所有这些信息(也许其他人能告诉你),但似乎你是在尝试模拟OrderedDict
的行为。
你可以直接使用OrderedDict
,或者如果你想列举你的信息,使用list
也可以做到。
3
把 g1、g2 等等存放在一个叫 imagelist 的列表里。
用 imagelist[pagenumber: pagenumber+16]
来获取页面。
使用你最开始的字典(图片编号对应网址)来查找这16个图片名称的每一个网址。