I have a list of dictionaries that I want to make circular sort.
sample = [ {'source': 'G', '"serial"': '0'}, {'source': 'G', '"serial"': '1'}, {'source': 'G', '"serial"': '2'}, {'source': 'P', '"serial"': '30'}, {'source': 'P', '"serial"': '0'}, {'source': 'P', '"serial"': '1'}, {'source': 'P', '"serial"': '2'}, {'source': 'P', '"serial"': '3'}, {'source': 'T', '"serial"': '2'}, {'source': 'T', '"serial"': '3'} ]
I want this result:
sample_solved = [ {'source': 'G', '"serial"': '0'}, {'source': 'P', '"serial"': '30'}, {'source': 'T', '"serial"': '2'}, {'source': 'G', '"serial"': '1'}, {'source': 'P', '"serial"': '1'}, {'source': 'T', '"serial"': '3'}, {'source': 'G', '"serial"': '2'}, {'source': 'P', '"serial"': '0'}, {'source': 'P', '"serial"': '2'}, {'source': 'P', '"serial"': '3'} ]
As I decided, it looks like this:
def roundrobin(*iterables):
Using Python defaultdict to separate items by source, and then using the roundrobin solution I got from Python docs.
But the solution does not apply to all cases, for example t, p, g = items_by_sources.values() will break when one source is missing or a new source is added.
How can I make a solution to cover more edge cases and make a pythonic solution?