我试图解决以下问题:
my_function_composition(f,g)
输入:两个函数f和g,用字典表示,因此存在g◦f。
输出:代表函数g◦f的字典。
示例:给定f = {0:'a',1:'b'}和g = {'a':'apple','b':'banana'},返回{0:'apple', 1:“香蕉”}。
我找到了一个解决方案,但对我来说却很混乱:
def my_function_composition(f,g): return {list(f.keys())[i]: list(g.values())[i] for i in f if list(f.values()) == list(g.keys())}
# example/test
w = {0:'a', 1:'b', 2: 'c'}
v = {'a': 'apple', 'b':'banana', 'c': 'carrot'}
my_function_composition(w,v)
根据这本书,下一节将介绍循环问题,因此,我认为对此有一个优雅的单行解决方案。
注意:非常感谢您能为您的解决方案提供评论,因为我是python的新手
答案 0 :(得分:2)
您可以使用dict理解:
d = {k: g[v] for k, v in f.items()}
d
变为:
{0: 'apple', 1: 'banana'}
答案 1 :(得分:1)
我会这样:
return {fk:g[fv] for fk, fv in f.items() if fv in g}
fk
是f
中的键,而fv
是f
中键的值。
我要做的是创建一个字典,其中的键由f
的键组成,值由在f
中查找g
的值组成(如果它们存在)。
我只是想做个书呆子,所以添加了if fv in g
,我认为这不是本练习的必要条件。
示例:
>>> def fcomp(f, g): return {fk:g[fv] for fk, fv in f.items() if fv in g}
...
>>> fcomp({0:'a', 1:'b', 2: 'c'}, {'a': 'apple', 'b':'banana', 'c': 'carrot'})
{0: 'apple', 1: 'banana', 2: 'carrot'}
>>>