по списку вы можете сделать:
d1 = {'cartoon': 'tom', 'film': 'rose'}
d2 = {'cartoon': 'jerry', 'film':['jack','marry'], 'serial' : 'little boy'}
#normalizing dictionaries
d1={k: v if isinstance(v , list) else [v] for k,v in d1.items()}
d2={k: v if isinstance(v , list) else [v] for k,v in d2.items()}
d3={k:list(set().union(d1.get(k, []),d2.get(k, []))) for k in (d1.keys()|d2.keys())}
print(d3)
вывод:
{'cartoon': ['jerry', 'tom'], 'film': ['marry', 'rose', 'jack'], 'serial': ['little boy']}
Если вы хотите показать отдельные значения в виде строки, вы можете сделать в конце:
d3={k:v if len(v)!=1 else v[0] for k,v in d3.items()}
вывод:
{'film': ['rose', 'marry', 'jack'], 'serial': 'little boy', 'cartoon': ['tom', 'jerry']}
Может быть, это то, что вы хотите сказать "все в одну строку":
d1 = {'cartoon': 'tom', 'film': 'rose'}
d2 = {'cartoon': 'jerry', 'film':['jack','marry'], 'serial' : 'little boy'}
#normalizing dictionaries
d1={k: v if isinstance(v , list) else [v] for k,v in d1.items()}
d2={k: v if isinstance(v , list) else [v] for k,v in d2.items()}
d3={k:list(set().union(d1.get(k, []),d2.get(k, []))) if len(set().union(d1.get(k, []),d2.get(k, [])))!=1 else list(set().union(d1.get(k, []),d2.get(k, [])))[0] for k in (d1.keys()|d2.keys())}
print(d3)