You could do something like:
def split_tasks(lst, n):
# sorts the list from largest to smallest
sortedlst = sorted(lst, key=lambda x: x[1], reverse=True)
# dict storing the total time for each set of tasks
totals = dict((x, 0) for x in range(n))
outlst = [[] for x in range(n)]
for v in sortedlst:
# since each v[1] is getting smaller, the place it belongs should
# be the outlst with the minimum total time
m = min(totals, key=totals.get)
totals[m] += v[1]
outlst[m].append(v)
return outlst
Which produces the expected output:
[[['file_A', 501]], [['file_B', 350]], [['file_C', 220], ['file_D', 100]]]