如何在Python中使用字典对象实现分页方案

1 投票
4 回答
2967 浏览
提问于 2025-04-17 11:17

有没有更好的方法来用 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

g1g2 等等存放在一个叫 imagelist 的列表里。

imagelist[pagenumber: pagenumber+16] 来获取页面。

使用你最开始的字典(图片编号对应网址)来查找这16个图片名称的每一个网址。

撰写回答