首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在ZPT中循环遍历OrderedDict的子组?

如何在ZPT中循环遍历OrderedDict的子组?
EN

Stack Overflow用户
提问于 2014-02-24 14:49:16
回答 1查看 167关注 0票数 2

我有一个浏览器视图方法,它返回一个包含最多18个大脑的OrderedDict,它起源于类似这样的东西:

代码语言:javascript
复制
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列表:

代码语言:javascript
复制
<ul>
  <li tal:repeat="brain mydict">
    <a tal:attributes="href python:mydict[brain]['video_id']">
      <img tal:replace="mydict[brain]['thumb']" />
    </a>
  </li>
</ul>

但我想要的是一个类似批处理的结构:

代码语言:javascript
复制
<ul>
  <li>
    <a>Item 1</a>
    <a>Item 2</a>
    <a>Item 3</a>
  </li>
  ...
  <li>
    <a>Item 16</a>
    <a>Item 17</a>
    <a>Item 18</a>
  </li>
</ul>

我想把这个{1:2, 2:4, 3:6, 4:8, 5:10, 6:12, 7:14, 8:16, 9:18}变成这个[{1:2, 2:4, 3:6}, {4:8, 5:10, 6:12}, {7:14, 8:16, 9:18}]

我不喜欢改变浏览器视图,因为模板的其他部分期望mydict的键是大脑。

顺便说一句,如果我有一个列表而不是一个dict,我可以用以下方法重新组合它的元素:

代码语言:javascript
复制
zip(*[mylist[i::3] for i in range(3)])

但这对迪克来说是不可能的,(奇怪的是,国际海事组织)对OrderedDicts也是不可能的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-24 20:25:28

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

代码语言:javascript
复制
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')])]
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21991079

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档