from itertools import chain
from collections import defaultdict
dict1 = {'bookA': 1, 'bookB': 2, 'bookC': 3}
dict2 = {'bookC': 2, 'bookD': 4, 'bookE': 5}
dict3 = defaultdict(list)
for k, v in chain(dict1.items(), dict2.items()):
    dict3[k].append(v)
 
for k, v in dict3.items():
    print(k, v)

# ('bookA', [1])
# ('bookB', [2])
# ('bookC', [3, 2])
# ('bookD', [4])
# ('bookE', [5])

같은 값을 가진 딕셔너리. 최대값 만큼 출력, 최소값 만큼 출력

from itertools import chain

u_dict = {}
str1, str2 = {'aa': 2}, {'aa': 3}
for k, v in chain(str1.items(), str2.items()):
    if k in u_dict:
        u_dict[k] = max(u_dict[k], v)
    else:
        u_dict[k] = v

print(u_dict)

# {'aa': 3}

i = []
for s1 in str1:
    if s1 in str2:
        i += [s1 for _ in range(min(str1[s1], str2[s1]))]

# ['aa', 'aa']