eval_params
私は次のような名前の辞書を持っています:
In [1]: eval_params
Out[1]:
{1: {'CLF': 'EMNB',
'EM': 'False',
'FEA': 'words',
'NGRAM': '1-1',
'PDS': 'T',
'PSE': '-',
'RN': '1dnf',
'STEM': 'False',
'UDS': 'He'},
2: {'CLF': 'EMNB',
'EM': 'False',
'FEA': 'words',
'NGRAM': '1-1',
'PDS': 'TS',
'PSE': '-',
'RN': '1dnf',
'STEM': 'False',
'UDS': 'He'},
3: {'CLF': 'EMNB',
'EM': 'False',
'FEA': 'words',
'NGRAM': '1-1',
'PDS': 'T',
'PSE': '-',
'RN': '1dnf',
'STEM': 'False',
'UDS': 'Te'}}
組み込み関数を使用する特定の述語でこの辞書をフィルタリングする必要がありますfilter
。
In [2]: filter(pred_func, eval_params.iteritems())
Out[2]:
[(3,
{'CLF': 'EMNB',
'EM': 'False',
'FEA': 'words',
'NGRAM': '1-1',
'PDS': 'T',
'PSE': '-',
'RN': '1dnf',
'STEM': 'False',
'UDS': 'Te'})]
私の問題は、内部の述語をハードコーディングするのではなく、pred_func
動的にに渡すことpred_func
です。現在pred_func
は次のようになります。
def pred_func((i, d)):
# I have to hard-code the parameters to filter by. I don't want that
return d['PDS'] == 'T' and d['UDS'] = 'Te'
代わりに、次のようなものが必要です。
def pred_func((i, d), predicates):
vals = []
# predicates would be a dictionary such as {'PDS':'T', 'UDS':'Te'}
for param, val in predicates.iteritems():
vals.append(d[param] == val)
return all(vals)
しかし、私が知る限り、述語関数に余分な引数を渡すことはできません。それでは、どうすれば私が望むことをエレガントな方法で達成できるでしょうか。何か案が?