Prefix search by trie tree
What comes to the data structure, I don't think it gets any more efficient, not at least as long as you confine yourself to search by prefix. For that reason, I will "review" your actual code and not the algorithm.

self.isEnd = False


I believe more canonic name would be self.is_leaf. Note that isEnd is not idiomatic Python, is_end is.

You should have two empty lines before any class declaration.

import ...


class FooBar:
    pass


Also, in

for c,n in ...


PEP 8 requires a space after (each) comma:

for c, n in ...
      ^
    space!


What comes to renaming self:

def insert(self, word):
    node = self
    for w in word:
        node = node.children[w]
    node.isEnd = True


I would not do it, yet I have to admit that it is just an opinion.