This is distinctly less readable than the previous version. Also, it's still not actually correct, I don't think, because it doesn't take into account inheritance (it only looks at the field's default value). Instead, you can use `field.is_set_on(self)` for the fields that are actually xblock fields.

Using `if cond ... continue` would help make it more readable, I think.

    if not value:
        continue

Also, it might be better to just split out the fields known to be xblock fields from the fields known not to be, and have each set have its own loop, because the individual loops would be much clearer.