如何在Python中使用dict对象实现分页解决方案

时间:2012-01-28 08:53:46

标签: python dictionary paging

使用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 个答案:

答案 0 :(得分:1)

1)这会给出随机结果吗?

排序。

引自official documentation关于dict

  

键和值以任意顺序迭代,这是非随机的,在Python实现中各不相同,并且取决于字典的插入和删除历史。

因此,出于您的目的,您无法了解迭代顺序的先验。

OrderedDict正是您要找的: OrderedDict是一个记住首次插入密钥的顺序的字典。

2)这实际上是一种正确的方法吗?

似乎不是这样。

我不知道是否有库可以为您处理所有这些信息(也许其他人可以告诉您),但似乎您正试图模仿OrderedDict行为。

您可以直接使用OrderedDict,或者如果您想枚举您的信息,list可以这样做。

答案 1 :(得分:1)

  • g1 g2 等存储在名为 imagelist
  • 的列表中
  • 使用imagelist[pagenumber: pagenumber+16]
  • 获取网页
  • 使用原始字典(图片编号到网址)查找这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]

......现在我再看一遍,那个生成器表达看起来很糟糕。 :|