我有以下多循环情况:
notify=dict()
for m in messages:
fields=list()
for g in groups:
fields.append(func(g,m))
notify[m.name]=fields
return notify
有没有办法把下面的内容写成理解或地图,看起来会更好(希望表现更好)
我有以下多循环情况:
notify=dict()
for m in messages:
fields=list()
for g in groups:
fields.append(func(g,m))
notify[m.name]=fields
return notify
有没有办法把下面的内容写成理解或地图,看起来会更好(希望表现更好)
from itertools import product
results = [func(g,m) for m,g in product(messages,groups)]
编辑
我认为您实际上可能想要一个字典,而不是列表字典:
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)
。
假设您真的是要通知以累积所有结果
return {m.name: [func(g, m) for g in groups] for m in messages}
您不希望返回字典吗?如下(假设m有字段名)
notify={m.name:[func(g,m) for g in groups] for m in messages}
不使用推导,但会稍微简化您的代码。
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