Вывести на печать два словаря разной длины
У меня есть два словаря different_a и different_b разной длины. Как мне вывести их оба на печать в следующем формате:
firstName-John first_name-Alex
isAlive-True isAlive-False
age-27 Age-27
city-New York city-Chicago
state-NY None
postalCode-10021-3100 None
Я использую следующий код:
for (key, value), (key1, value1) in zip(different_a.items(), different_b.items()):
print(("{0}-{1}\t\t\t\t{2}-{3}" .format(key, value, key1, value1)))
Но проблема в том, что когда ключ-значения в одном словаре заканчиваются, то и цикл прекращается, не давая возможности доитерировать другой более длинный словарь.
Ответы (2 шт):
Автор решения: CrazyElf
→ Ссылка
Можно использовать zip_longest, но нужно указать параметр fillvalue (спасибо за напоминание SergFSM), чтобы у вас не сломалась распаковка параметров:
from itertools import zip_longest
different_a = {'a': 1, 'b': 2, 'c': 3}
different_b = {'a': 4, 'b': 5}
for (key1, value1), (key2, value2) in zip_longest(different_a.items(), different_b.items(), fillvalue=(None, None)):
print("{0}-{1}\t\t\t\t{2}-{3}" .format(key1, value1, key2, value2))
Вывод:
a-1 a-4
b-2 b-5
c-3 None-None
Автор решения: SergFSM
→ Ссылка
немного изменил ваш код:
for items_a, items_b in zip_longest(different_a.items(),
different_b.items(),
fillvalue=(None,None)):
print(("{}-{}\t\t\t\t{}-{}".format(*items_a,*items_b)))