我试图将我的大脑包裹起来,但它不够灵活.
在我的Python脚本中,我有一个列表字典的字典.(实际上它会更深一些,但这个级别不涉及这个问题.)我想把所有这些变成一个长列表,扔掉所有字典键.
因此我想改造
{1: {'a': [1, 2, 3], 'b': [0]},
2: {'c': [4, 5, 1], 'd': [3, 8]}}
Run Code Online (Sandbox Code Playgroud)
至
[1, 2, 3, 0, 4, 5, 1, 3, 8]
Run Code Online (Sandbox Code Playgroud)
我可以设置map-reduce来迭代外部字典的项目,从每个子字典构建一个子列表,然后将所有子列表连接在一起.
但是对于大型数据集而言,这似乎效率低下,因为中间数据结构(子列表)将被丢弃.有没有办法一次性完成?
除此之外,我很乐意接受一个有效的两级实现......我的map-reduce生锈了!
更新: 对于那些感兴趣的人,下面是我最终使用的代码.
请注意,虽然我在上面询问了列表作为输出,但我真正需要的是一个排序列表; 即,展平的输出可以是可以排序的任何可迭代的.
def genSessions(d):
"""Given the ipDict, return an iterator that provides all the sessions,
one by one, converted to tuples."""
for uaDict in d.itervalues():
for sessions in uaDict.itervalues():
for session in sessions:
yield tuple(session)
Run Code Online (Sandbox Code Playgroud)
...
# Flatten dict of dicts of lists of sessions into a …Run Code Online (Sandbox Code Playgroud)