Python 如何循环ZPT中OrderedDict的子组?

Python 如何循环ZPT中OrderedDict的子组?,python,dictionary,plone,grouping,zpt,Python,Dictionary,Plone,Grouping,Zpt,我有一个browser view方法,它返回一个OrderedDict,最多包含18个大脑,其来源类似于: mydict = OrderedDict() for b in brains: video_obj = b.getObject() mydict[b] = {'video_id': video_obj.url, 'thumb': video_obj.tag(scale='thumb')} return mydict 我可以在ZPT中轻松

我有一个browser view方法,它返回一个OrderedDict,最多包含18个大脑,其来源类似于:

mydict = OrderedDict()
for b in brains:
    video_obj = b.getObject()
    mydict[b] = {'video_id': video_obj.url,
                 'thumb': video_obj.tag(scale='thumb')} 
return mydict
我可以在ZPT中轻松循环生成平面UL>LI列表:

<ul>
  <li tal:repeat="brain mydict">
    <a tal:attributes="href python:mydict[brain]['video_id']">
      <img tal:replace="mydict[brain]['thumb']" />
    </a>
  </li>
</ul>

但这对于dicts来说是不可能的,奇怪的是,我也不可能用于OrderedDicts。

我认为这正是您真正想要的:

from collections import OrderedDict

mydict = OrderedDict()

for i in xrange(18, 0, -1):
    mydict['d{0}'.format(i)] = 'item {0}'.format(i)

regroupped_dict = [OrderedDict(mydict.items()[i: i + 2])
                   for i in xrange(0, len(mydict), 3)]

print regroupped_dict

# Result: [OrderedDict([('d18', 'item 18'), ('d17', 'item 17')]), OrderedDict([('d15', 'item 15'), ('d14', 'item 14')]), OrderedDict([('d12', 'item 12'), ('d11', 'item 11')]), OrderedDict([('d9', 'item 9'), ('d8', 'item 8')]), OrderedDict([('d6', 'item 6'), ('d5', 'item 5')]), OrderedDict([('d3', 'item 3'), ('d2', 'item 2')])]

我想这才是你真正想要的:

from collections import OrderedDict

mydict = OrderedDict()

for i in xrange(18, 0, -1):
    mydict['d{0}'.format(i)] = 'item {0}'.format(i)

regroupped_dict = [OrderedDict(mydict.items()[i: i + 2])
                   for i in xrange(0, len(mydict), 3)]

print regroupped_dict

# Result: [OrderedDict([('d18', 'item 18'), ('d17', 'item 17')]), OrderedDict([('d15', 'item 15'), ('d14', 'item 14')]), OrderedDict([('d12', 'item 12'), ('d11', 'item 11')]), OrderedDict([('d9', 'item 9'), ('d8', 'item 8')]), OrderedDict([('d6', 'item 6'), ('d5', 'item 5')]), OrderedDict([('d3', 'item 3'), ('d2', 'item 2')])]

你是说你想对这些项目进行批处理,以3秒为单位进行分组?@martijn pieters是的,我想对它们进行批处理。我还更新了我问题中的第一个片段,以反映OrderedDict的有效使用。您是否尝试了zip*[mydict.values[I::3]for I in range3]@avoinea for{1:2,2:4,3:6,4:8,5:10,6:12,7:14,9:18},返回2,4:4,5:10,6:14,18],但我实际上想要[{1:2,2:4,5:10,6:12},{7:14,9:18]你是说你想对这些项目进行批处理,以3秒为单位进行分组?@martijn pieters是的,我想对它们进行批处理。我还更新了我问题中的第一个片段,以反映OrderedDict的有效使用。您是否尝试了zip*[mydict.values[I::3]for I in range3]@avoinea for{1:2,2:4,3:6,4:8,5:10,6:12,7:14,9:18},返回2,4:4,5:10,6:14,18],但我实际上想要[{1:2,2:4,5:10,6:12},{7:14,9:18]
from collections import OrderedDict

mydict = OrderedDict()

for i in xrange(18, 0, -1):
    mydict['d{0}'.format(i)] = 'item {0}'.format(i)

regroupped_dict = [OrderedDict(mydict.items()[i: i + 2])
                   for i in xrange(0, len(mydict), 3)]

print regroupped_dict

# Result: [OrderedDict([('d18', 'item 18'), ('d17', 'item 17')]), OrderedDict([('d15', 'item 15'), ('d14', 'item 14')]), OrderedDict([('d12', 'item 12'), ('d11', 'item 11')]), OrderedDict([('d9', 'item 9'), ('d8', 'item 8')]), OrderedDict([('d6', 'item 6'), ('d5', 'item 5')]), OrderedDict([('d3', 'item 3'), ('d2', 'item 2')])]