Ваш пример кода может быть неточным, но как написано,
sorted_B = [list(value) for key, value in
groupby(sorted(B_dict.values()), key=itemgetter(2,3))]
будет одинаковым каждый раз ... почему оно вообще в цикле?
Также
for k, v in A_dict.items():
for i, value in B_dict.items():
if k == value[0]:
outfile.write('{0}\t{1}\t{2}\t{3}\t{4}\t{5}\n'.format(
i, k, v, value[1], value[2], value[3])
Похоже, это можно записать как
for i, value in B_dict.items():
k = value[0]
if k in A_dict:
outfile.write('{0}\t{1}\t{2}\t{3}\t{4}\t{5}\n'.format(
i, k, A_dict[k], value[1], value[2], value[3])
Что должно быть быстрее - это линейное, а не квадратичное время.