我们如何在这里使用理解

时间:2013-05-30 04:05:30

标签: python

我有以下多循环情况:

notify=dict()
for m in messages:
    fields=list()
    for g in groups:
        fields.append(func(g,m))
    notify[m.name]=fields
return notify

有没有办法将下面的内容写成理解或地图,看起来会更好(希望也能表现得更好)

4 个答案:

答案 0 :(得分:2)

from itertools import product
results = [func(g,m) for m,g in product(messages,groups)]

修改

我想你可能真的想要一个dicts的词典,而不是列表的词典:

from collections import defaultdict
from itertools import product
results = defaultdict(dict)
for m,g in product(messages,groups):
    results[m.name][g] = func(g,m)

借用gnibbler:

return {m.name: {g:func(g,m) for g in groups} for m in messages}

现在,您只需使用results[msgname][groupname]即可获得func(g,m)的价值。

答案 1 :(得分:2)

假设你真的是指通知积累所有结果

return {m.name: [func(g, m) for g in groups] for m in messages}

答案 2 :(得分:1)

你不想要返回字典吗?如下(假设m具有字段名称)

notify={m.name:[func(g,m) for g in groups] for m in messages}

答案 3 :(得分:0)

不使用理解,但稍微简化了代码。

from collections import defaultdict

def foo(messages, groups):

    notify=defaultdict(list)
    for m in messages:
        for g in groups:
            notify[m.name].append(func(g,m))
    return notify