将字典作为参数传递给python中的函数,其中参数本身就是函数

将字典作为参数传递给python中的函数,其中参数本身就是函数,python,Python,我目前正在使用Python3和plotnine库 我试图使用plotnine和字典作为参数。以下是我正在尝试做的一个简单的工作示例: import pandas as pd import plotnine as p9 iris = pd.read_csv('https://raw.githubusercontent.com/mwaskom/seaborn-data/master/iris.csv') plot = p9.ggplot(data=iris, mapping=p9.aes(x='

我目前正在使用Python3和plotnine库

我试图使用plotnine和字典作为参数。以下是我正在尝试做的一个简单的工作示例:

import pandas as pd
import plotnine as p9

iris = pd.read_csv('https://raw.githubusercontent.com/mwaskom/seaborn-data/master/iris.csv')

plot = p9.ggplot(data=iris, mapping=p9.aes(x='petal_width')) +\
 p9.geom_density(fill='#6bd1e8', alpha=0.5) +\
 p9.theme(axis_title_x = p9.element_text(size = 20),\
         axis_text_x = p9.element_text(size=10, angle = 45))

print(plot)
这里,我想在'p9.theme'函数中使用我的字典,但是这些函数参数是函数本身('p9.element_text')

现在我有一本简单的字典:

theme:
  axis_title_x:
    size: 20
  axis_text_x:
    size: 10
    angle: 45
目前,如果我采取以下措施,它会部分起作用:

p9.theme(axis_title_x = p9.element_text(**conf['axis_title_x']),\
         axis_text_x = p9.element_text(**conf['axis_text_x']))
p9.theme(**conf['theme'])
但我想要的是:

p9.theme(axis_title_x = p9.element_text(**conf['axis_title_x']),\
         axis_text_x = p9.element_text(**conf['axis_text_x']))
p9.theme(**conf['theme'])
我试着改变字典的结构,但没能使它起作用。有没有人对如何做到这一点有想法,或者有解决办法


谢谢

词典中的pass函数太多了。问题是函数
**kwargs
在创建时不能在同一个字典中引用。所以有两种方法。我有两本字典:

def test(a, b, c=None):
    print(a, b, c)

def foo(x):
    return f'!{x}'

sub_conf = {
    'foo': {'x': 2}
}

conf = {
    'test': {'a': 1, 'b': foo(**sub_conf['foo'])}
}

test(**conf['test'])
或者分步骤创建字典,以便可以引用现有对象

conf = {
    'foo': {'c': 2}
}

conf['test'] = {'a': 1, 'b': foo(**conf['foo'])}

字典中的pass函数太多了。问题是函数
**kwargs
在创建时不能在同一个字典中引用。所以有两种方法。我有两本字典:

def test(a, b, c=None):
    print(a, b, c)

def foo(x):
    return f'!{x}'

sub_conf = {
    'foo': {'x': 2}
}

conf = {
    'test': {'a': 1, 'b': foo(**sub_conf['foo'])}
}

test(**conf['test'])
或者分步骤创建字典,以便可以引用现有对象

conf = {
    'foo': {'c': 2}
}

conf['test'] = {'a': 1, 'b': foo(**conf['foo'])}

谢谢你的回答。我可能是解决我的问题的最好方法,不过,由于单词表来自一个单独的yaml文件,我认为我不能真正在这里应用您的解决方案。另外,我在使用plotnine时遇到了另一个问题,所以我不得不切换到seaborn,这真的很好,我很高兴我尝试了它。再次感谢!谢谢你的回答。我可能是解决我的问题的最好方法,不过,由于单词表来自一个单独的yaml文件,我认为我不能真正在这里应用您的解决方案。另外,我在使用plotnine时遇到了另一个问题,所以我不得不切换到seaborn,这真的很好,我很高兴我尝试了它。再次感谢!