parameters: (self, products, searchWord)
return_statement: return result
docstring: :type products: List[str]
          :type searchWord: str
          :rtype: List[List[str]]
docstring_summary: :type products: List[str]
          :type searchWord: str
          :rtype: List[List[str]]
docstring_tokens: : type products : List [ str ] : type searchWord : str : rtype : List [ List [ str ]]
function: def suggestedProducts(self, products, searchWord):
          """
          :type products: List[str]
          :type searchWord: str
          :rtype: List[List[str]]
          """
          products.sort()
          trie = TrieNode2()
          for i in xrange(len(products)):
              trie.insert(products, i)
          result = [[] for _ in xrange(len(searchWord))]
          for i, c in enumerate(searchWord):
              if c not in trie.leaves:
                  break
              trie = trie.leaves[c]
              result[i] = map(lambda x: products[x], trie.infos)
          return result
function_tokens: def suggestedProducts ( self , products , searchWord ) : products . sort ( ) trie = TrieNode2 ( ) for i in xrange ( len ( products ) ) : trie . insert ( products , i ) result = [ [ ] for _ in xrange ( len ( searchWord ) ) ] for i , c in enumerate ( searchWord ) : if c not in trie . leaves : break trie = trie . leaves [ c ] result [ i ] = map ( lambda x : products [ x ] , trie . infos ) return result