我有一個名爲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)
不過,據我所知,我可以不通過額外的參數謂詞功能,那麼我怎麼才能以優雅的方式完成我想要的?任何想法?
創建一個高階函數,即返回功能的功能。這就是'operator'中的大部分函數的工作原理:http://docs.python.org/2/library/operator.html。 – 2013-03-16 11:32:07
@FelixKling你能給我一個具體的例子嗎? – pemistahl 2013-03-16 11:32:45
完成........... – 2013-03-16 11:36:44