我希望得到一本字典和列表像
{f1(0):g1(0), f2(0):g2(0),f1(1):g1(1), f2(1):g2(1)}
[f1(0),f2(0),f1(1),f2(1)]
其中f1(x), f2(x)
和g1(x), g2(x)
一些定义的函数。
有两个发电集团f1(x):g1(x),f2(x):g2(x)
和for i in range(2)
。
我们可以通过下面的代码定义这本字典
new_dict = {f1(x):g1(x) for x in range(2)}
new_dict.update({f2(x):g2(x) for x in range(2)})
但是列表中有订单,看来我不得不通过创建for循环这样的列表。
new_list= list()
for i in range(2)
new_list.append(f1(i))
new_list.append(f2(i))
我不知道是否有类似以下一些优雅的方式:
{f1(x):g1(x), f2(x):g2(x) for x in range(2)}
[f1(x) , f2(x) for x in range(2)]
使用的功能列表中的理解。
{f(x): g(x) for x in range(2) for f, g in [(f1, g1), (f2, g2)]}
名单中还可能可能是一个字典,这取决于你有多在乎排序(例如,如果一个密钥可能会被覆盖),但是需要注意的是Python的3.7类型的字典,现在规定要记住的插入顺序(和OrderedDict
总是有)
new_dict = {f(x): g(x) for x in range(2) for f, g in {f1:g1, f2:g2}.items()}
您可以将键转换到一个列表像
new_list = [*new_dict]
这将具有相同的插入顺序,但字典不能包含重复键,所以单从它也不会有的制造。这可能是也可能不是你想要的。
如果你想保留副本,做对的列表,然后再使用它来使字典和列表。
pairs = [(f(x), g(x)) for x in range(2) for f, g in [(f1, g1), (f2, g2)]]
new_dict = dict(pairs)
new_list = [f for f, _ in pairs]
如果你还在使用旧版本的Python,请注意,您也可以从像这样对作出OrderedDict
,
from collections import OrderedDict
new_dict = OrderedDict((f(x), g(x)) for x in range(2) for f, g in [(f1, g1), (f2, g2)])
我不知道是否有类似以下一些优雅的方式:
{f1(x):g1(x), f2(x):g2(x) for x in range(2)} [f1(x) , f2(x) for x in range(2)]
可以具有变化数量的输出通过使用链中的每个回路。
from itertools import chain
[*chain.from_iterable([f1(x), f2(x)] for x in range(2))]
dict(*chain.from_iterable([(f1(x), g1(x)), (f2(x), g2(x))] for x in range(2)))
你也可以做链接自己,但它需要更多的循环。
[f for fs in ((f1(x), f2(x)) for x in range(2)) for f in fs]