代码之家  ›  专栏  ›  技术社区  ›  Nag Arjun Reddy

C#查询的Python等价物

  •  0
  • Nag Arjun Reddy  · 技术社区  · 6 年前

    我正试图将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 回复  |  直到 6 年前
        1
  •  0
  •   Kilves    6 年前

    您的python代码有一些问题。

    首先,我假设您希望传递一个JSON对象作为处理消息的参数。我也假设你的代码在一个类中。在这种情况下,你想写 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中,标记字段名称是一种惯例。