Since these are all python dicts and you are calling the dict.get() method on them, you can use an empty dict to chain:
[m.get("gparents", {}).get("parent", {}).get("child") for m in M]
By leaving off the default for the last .get() you fall back to None. Now, if any of the intermediary keys is not found, the rest of the chain will use empty dictionaries to look things up, terminating in .get('child') returning None.