我有以下多循环情况:
notify=dict()
for m in messages:
fields=list()
for g in groups:
fields.append(func(g,m))
notify[m.name]=fields
return notify
有没有办法将下面的内容写成理解或地图,看起来会更好(希望也能表现得更好)
答案 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