首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >迭代多个插入器的分组并集

迭代多个插入器的分组并集
EN

Stack Overflow用户
提问于 2011-03-18 22:43:04
回答 1查看 153关注 0票数 1

我正在尝试循环遍历包含许多迭代器的dict ...它们的大小是许多in,但它们是经过排序的。一个简单的例子如下所示:

代码语言:javascript
复制
t = { 'a': iter([1,1,1,2,2,3,3,4,6,7,7,7]),
'b': iter([2,2,2,3,3,4,6,6,6,7,7,7]),
'c': iter([1,1,1,4,4,6,6,7,7]),
'd': iter([1,1,1,3,3,3,7,7,7])
}

我需要为本身是迭代器的每个唯一项生成一个dict (同样,因为每个分组的大小可能是to )。在这个例子中,我需要类似这样的东西:

代码语言:javascript
复制
{'a':iter([1,1,1]),
'b':iter(),
'c':iter([1,1,1]),
'd':iter([1,1,1])
}

{'a':iter([2,2]),
'b':iter([2,2,2]),
'c':iter(),
'd':iter()
}

{'a':iter([3,3]),
'b':iter([3,3]),
'c':iter(),
'd':iter([3,3,3])
}

{'a':iter([4]),
'b':iter([4]),
'c':iter([4,4]),
'd':iter()
}

没有5,所以我们就跳过它

代码语言:javascript
复制
{'a':iter([6]),
'b':iter([6,6,6]),
'c':iter([6,6]),
'd':iter()
}

{'a':iter([7,7,7]),
'b':iter([7,7,7]),
'c':iter([7,7]),
'd':iter([7,7,7])
}

StopIteration

如果dict中缺少“空迭代器”也没问题。

我很确定我需要一台groupby,但我就是不能聚在一起。

谢谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-03-18 23:11:01

到目前为止,我已经想出了这样的东西:

代码语言:javascript
复制
grouped = {}
for key, item in t.items():
  grouped[key] = groupby(item):

current_items = {}
for key, val in grouped.items():
  current_items[key] = val.next()

while current_items:
  #find the first one
  this_item = min((item for item, _ in current_items.items()))
  outdict = {}
  for key, (item, rows) in current_items.items():
    if item == this_item:
      #move the item to the output
      outdict[key] = rows
    try:
      #advance the iterator
      current_items[key] = grouped.next()
    except StopIteration:
      #must be out of items
      current_items.pop(key)
      grouped.pop(key)
  yield outdict

如果有人知道一种更具蟒蛇风格的方法,我将很高兴看到它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5353596

复制
相关文章

相似问题

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