Convert each list to dict, combine keys of these dicts, loop thru keys and generate another list, where each element is date, value from first dict or 0 and value from second dict or 0, it is better explained via code :)
def merge_lists(list1, list2):
dict1 = dict(list1)
dict2 = dict(list2)
dates = list(set(dict1.keys())|set(dict2.keys()))
dates.sort()
merged_list = []
for date in dates:
item = [date]
item.append(dict1.get(date,0))
item.append(dict2.get(date,0))
merged_list.append(item)
return merged_list
merged_list = merge_lists([('2013-01-06', 2),
('2013-02-03', 1),
('2013-02-10', 1),
('2013-02-24', 1),
('2013-03-03', 2),
('2013-03-24', 1)],
[('2013-03-03', 1),
('2013-03-31', 1),
('2013-05-12', 1),
('2013-05-19', 2),
('2013-06-30', 2)])
import pprint
pprint.pprint(merged_list)
output:
[['2013-01-06', 2, 0],
['2013-02-03', 1, 0],
['2013-02-10', 1, 0],
['2013-02-24', 1, 0],
['2013-03-03', 2, 1],
['2013-03-24', 1, 0],
['2013-03-31', 0, 1],
['2013-05-12', 0, 1],
['2013-05-19', 0, 2],
['2013-06-30', 0, 2]]
You can make it generic by merging any number of lists
def merge_lists(*lists):
dicts = [dict(l) for l in lists]
dates = set()
for d in dicts:
dates |= set(d.keys())
dates = list(dates)
dates.sort()
merged_list = []
for date in dates:
item = [date]
for d in dicts:
item.append(d.get(date,0))
merged_list.append(item)
return merged_list