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

如何在Python中使用dict对象实现分页解决方案,python,dictionary,paging,Python,Dictionary,Paging,使用dict实现分页解决方案是否有比这更好的方法 我有一个带有图像名称和URL的dict。 根据用户的请求(即页码),我需要一次输入16个键值对。 这是一种分页解决方案。 我可以这样实现: 例如: dict = {'g1':'first', 'g2':'second', ... } 现在,我可以使用以下方法创建键到数字的映射: ordered={} for i, j in enumerate(dict): ordered[i]=j 然后检索它们: dicttosent={} for

使用
dict
实现分页解决方案是否有比这更好的方法

我有一个带有图像名称和URL的
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]]

这是正确的方法吗?或者这会产生随机结果吗?

视情况而定。如果您的
dict
在应用程序的生命周期内没有变化,并且您不关心dict中项目的顺序,那么您应该可以


如果没有,您可能应该使用集合.OrderedDict或保留键的排序列表,具体取决于您的需求。使用普通的
dict
并不能保证迭代顺序,因此每次修改输入dict后,都可以得到不同的结果。

这取决于具体情况。如果您的
dict
在应用程序的生命周期内没有变化,并且您不关心dict中项目的顺序,那么您应该可以

如果没有,您可能应该使用集合.OrderedDict或保留键的排序列表,具体取决于您的需求。使用普通的
dict
并不能保证迭代顺序,因此每次修改输入dict后,都可以得到不同的结果。

1)这会产生随机结果吗? 有点

引用《关于<代码>的格言》:

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

因此,出于您的目的,您无法预先知道迭代的顺序

这就是您要寻找的:OrderedDict是一个能够记住首次插入密钥顺序的dict

2) 这真的是一个正确的方法吗? 似乎不是这样

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

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

1)这会产生随机结果吗? 有点

引用《关于<代码>的格言》:

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

因此,出于您的目的,您无法预先知道迭代的顺序

这就是您要寻找的:OrderedDict是一个能够记住首次插入密钥顺序的dict

2) 这真的是一个正确的方法吗? 似乎不是这样

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

您可以直接使用
OrderedDict
,或者如果您想枚举您的信息,可以使用
列表来完成。

  • 将g1、g2等存储在名为imagelist的列表中
  • 使用
    imagelist[pagenumber:pagenumber+16]
    获取页面
  • 使用原始dict(图像编号到url)查找这16个图像名称中每个图像的url
      • 将g1、g2等存储在名为imagelist的列表中
      • 使用
        imagelist[pagenumber:pagenumber+16]
        获取页面
      • 使用原始dict(图像编号到url)查找这16个图像名称中每个图像的url

        • 为什么不创建一个映射到页面的
          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]


          …现在我再看一遍,生成器表达式看起来有点糟糕|

          为什么不创建一个映射到页面的
          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]


          …现在我再看一遍,生成器表达式看起来有点糟糕|

          Django是一个web框架,它有一个处理这个问题的工具,Django是一个web框架,它有一个处理这个问题的工具。