Even with the comment, this is really not clear. What about giving more meaningful names than ret[asset_id][1] and ret[asset_id][1]?

For instance you could write

gmvs, rupture_ids = zip(*((asset_data[k], r) for r in sorted(asset_data)))
ret[asset_id] = [gmvs, rupture_ids]
assert len(gmvs) == len(ruptures) == len(rupture_ids)

Perhaps asset_data could be called ruptures_gmvs_dict, something that would make it clear its structure.