等效于C#查询的Python

时间:2018-08-07 06:05:04

标签: c# python .net python-3.x python-2.7

我正在尝试将C#方法复制到python,卡在查询附近

var handler = from handler in _message

private JObject ProcessMessage(JObject json)
{
    var type = GetProperty(json, TypeField).ToString();
    message = GetProperty(json, MsgField).ToString();
    var handlers = from handler in _message
                   where handler.Type == type && handler.Name == msg                                 
                   select handler;
    var selected = handlers.FirstOrDefault();
    return selected.Process(json);  
}

这是我尝试过的python代码,

def process_message(self):
    type=get_property(self,translator.TypeField)
    message=get_property(self,translator.MsgField)


def get_property(self, TypeField):
    type_token = self.get(TypeField)
    return type_token

1 个答案:

答案 0 :(得分:0)

您的python代码有些错误。

首先,我假设您想将JSON对象作为参数传递给process_message。我还假设您的代码在类中。在这种情况下,您不仅要写process_message(self, json),而且要写process_message(self)

第二,get_property是多余的。例如,您可以将其替换为type = json.get(translator.TypeField)

对于查询,您可以使用列表理解:

handlers = [h for h in _message if h.type == type and h.name == message]

最后,我们得到这样的东西:

def process_message(self, json):
    type = json.get(translator.type_field)
    message = json.get(translator.msg_field)
    selected = [h for h in _message if h.type == type and h.name == message]

    if len(selected) > 0:
        return selected[0].process(json)

我用小写字母替换了您的命名,因为在python中,习惯上这样标记字段名称。