Вы создаете словарь списка в начале:
one = defaultdict(list)
for k, v in zip(a, b):
one[k].append(v)
[output] : defaultdict(list, {1: [0, 3], 2: [0], 3: [5], 4: [6], 5: [0]})
two = defaultdict(list)
for k, v in zip(c, d):
two[k].append(v)
[output] : defaultdict(list, {2: [20], 3: [30], 4: [40], 5: [50, 70], 6: [60]})
Поэтому при вызове k, v в one.items () вы получаете ключ и список.
Просто переключитесь на итерацию по списку, и вам будет хорошо идти
three = defaultdict(list)
for k, v in one.items():
for value in v:
if value in two.keys():
newvalue = two[value]
three[k].append(newvalue)
Однако я получаю этот вывод:
defaultdict(list, {1: [[30]], 3: [[50, 70]], 4: [[60]]})
Что звучит разумно для меня, но это не ваш ожидаемый, не могли бы вы объяснить?
Давайте попробуем узнать с помощью дик-понимания
output = { k : two[v_2] for k,v in one.items() for v_2 in v}
[output] : {1: [30], 2: [], 3: [50, 70], 4: [60], 5: []}
Запрос на сумму:
Конечно, несколько способов сделать это, самый быстрый снова с dict_comprehension и sum
output_sum = {k: sum(v) for k,v in output.items()}