我正在尝试创建一个转换数据的方法列表(或字典)。例如,我有如下数据:
data = [
{'Result': 1, 'Reason1': False, 'Reason2': 1},
{'Result': 0, 'Reason1': False, 'Reason2':'haha'},
{'Result': 0, 'Reason1': True, 'Reason2': 'hehe'},
{'Result': 0, 'Reason1': True, 'Reason2': 0},
]
def rule_1(datum):
modified_datum = datum
if datum['Reason1']:
modified_datum['Result'] = 1 # always set 'Result' to 1 whenever 'Reason1' is True
else:
modified_datum['Result'] = 1 # always set 'Result' to 0 whenever 'Reason1' is False
return modified_datum
def rule_2(datum):
modified_datum = datum
if type(datum['Reason2']) is str:
modified_datum['Result'] = 1 # always set 'Result' to 1 whenever 'Reason2' is of type 'str'
elif type(datum['Reason2']) is int:
modified_datum['Result'] = 2 # always set 'Result' to 2 whenever 'Reason2' is of type 'int'
else:
modified_datum['Result'] = 0
return modified_datum
# There can be 'rule_3', 'rule_4' and so on... Also, these rules may have different method signatures (that is, they may take in more than one input parameter)
rule_book = [rule_2, rule_1] # I want to apply rule_2 first and then rule_1
processed_data = []
for datum in data:
for rule in rule_book:
# Like someone mentioned here, the line below works, but what if I want to have different number of input parameters for rule_3, rule_4 etc.?
# processed_data.append(rule(datum))
我认为this answer关于堆栈溢出的内容非常接近我要做的,但是我想向有Python经验的人学习如何最好地处理它。我给这篇文章贴上了“dispatch”的标签,我想这是我想要达到的目标的名称(?)感谢您的帮助和建议!你知道吗
正如你所说,你已经很接近了。您所需要做的就是在遍历时调用
rule
。你知道吗关于处理不同长度的参数,您可以选择在规则中使用
*args
和**kwargs
。下面是一个简单的例子:结果:
关键是保持规则之间的参数一致,一旦所有内容都传入,只需获取相关对象并加以利用:
以您构建代码的方式,我相信您应该能够理解并将其应用到自己的代码中。你知道吗
相关问题 更多 >
编程相关推荐