Make each helper more robust

Respond appropriately to dictionary-like objects, empty iterables, and non-iterables