Este provavelmente não será uma resposta popular, mas você quase certamente não quero fazer isso. Se você quiser uma cópia que é uma junção, então usar cópia (ou deepcopy , dependendo do que você quiser) e depois atualizar. As duas linhas de código são muito mais legível - mais Pythonic - do que a criação de linha única com .items () + .items (). Explícito é melhor que implícito.
Além disso, quando você usa .items () (pré Python 3.0), você está criando uma nova lista que contém os itens do dict. Se os seus dicionários são grandes, então isso é bastante gerais (duas grandes listas que vai ser jogado fora assim que o dict mesclado é criado). update () pode funcionar de forma mais eficiente, porque ele pode ser executado através do segundo dict item por item.
Em termos de tempo :
>>> timeit.Timer("dict(x, **y)", "x = dict(zip(range(1000), range(1000)))\ny=dict(zip(range(1000,2000), range(1000,2000)))").timeit(100000)
15.52571702003479
>>> timeit.Timer("temp = x.copy()\ntemp.update(y)", "x = dict(zip(range(1000), range(1000)))\ny=dict(zip(range(1000,2000), range(1000,2000)))").timeit(100000)
15.694622993469238
>>> timeit.Timer("dict(x.items() + y.items())", "x = dict(zip(range(1000), range(1000)))\ny=dict(zip(range(1000,2000), range(1000,2000)))").timeit(100000)
41.484580039978027
IMO a pequena desaceleração entre os dois primeiros vale a pena para a legibilidade. Além disso, os argumentos de palavra-chave para a criação de dicionário só foi adicionada no Python 2.3, enquanto copiar () e update () irá funcionar em versões mais antigas.